【问题标题】:Group by help ( grouping by multiple, have duplicates)按帮助分组(按多个分组,有重复)
【发布时间】:2017-04-17 13:42:15
【问题描述】:

所以我有一个任务,我需要按日期和提供者名称对结果进行分组,但目前我的代码列出了多个日期和提供者。 (需要每天有一个提供者(总共 25 天),所以我的表格显示了提供者当天收到了多少消息以及他们赚了多少)

这需要是我的结果。 Result table

But this is what i'm currently getting

这是我目前的代码

SELECT date_format( time, '%Y-%m-%d' ) AS Date, provider_name, COUNT( message_id ) AS Messages_count, SUM( price ) AS Total_price
FROM mobile_log_messages_sms
INNER JOIN service_instances ON service_instances.service_instance_id =   mobile_log_messages_sms.service_instance_id
INNER JOIN mobile_providers ON mobile_providers.network_code = mobile_log_messages_sms.network_code
WHERE time
BETWEEN '2017-02-26 00:00:00'
AND time
AND '2017-03-22 00:00:00'
AND price IS NOT NULL
AND price <> ''
AND service IS NOT NULL
AND service <> ''
AND enabled IS NOT NULL
AND enabled >=1
GROUP BY provider_name, time
ORDER BY time DESC

你能告诉我我在哪里搞砸了,我真的想不出答案。

【问题讨论】:

  • 您正在对时间进行分组,这将按天对结果进行分组,包括小时、分钟和秒,这就是为什么您从同一天获得不同计数的原因。请尝试按天分组。

标签: mysql date time group-by grouping


【解决方案1】:

试试这样:

    ....

    GROUP BY provider_name, date_format( time, '%Y-%m-%d' )
    ORDER BY time DESC

您正在对时间进行分组,这将按时间对结果进行分组,包括小时、分钟和秒等等......这就是为什么您从同一天得到不同的计数。请尝试按天分组。

【讨论】:

  • 哇。你打败了我:)
  • ;) 你明白原因吗?
【解决方案2】:

time 列是datetime。所以它是按日期和时间分组的,而不仅仅是日期。

将 GROUP BY 语句更改为

GROUP BY provider_name, date_format( time, '%Y-%m-%d' )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多