我正在尝试汇总一些通话记录并做错了事 - 但不确定是什么。
我有以下查询:
SELECT
c.name,
IF(MONTH(start) = 1, SUM(duration),0) AS 'Jan',
IF(MONTH(start) = 2, SUM(duration),0) AS 'Feb',
IF(MONTH(start) = 3, SUM(duration),0) AS 'Mar',
IF(MONTH(start) = 4, SUM(duration),0) AS 'Apr',
IF(MONTH(start) = 5, SUM(duration),0) AS 'Jun',
IF(MONTH(start) = 6, SUM(duration),0) AS 'Jul',
IF(MONTH(start) = 7, SUM(duration),0) AS 'Aug'
FROM
call_history ch, client c
WHERE
ch.client_reseller_id = c.id
GROUP BY ch.client_reseller_id
ORDER BY c.name;
start
字段包含调用的日期/时间。该表只包含一年的记录,所以不用担心没有过滤年份。
我得到的结果不符合预期:
+--------------------------------+----------+------+------+--------+------+------+------+
| name | Jan | Feb | Mar | Apr | Jun | Jul | Aug |
|+-------------------------------+----------+------+------+--------+------+------+------+
| Come company | 5243080 | 0 | 0 | 0 | 0 | 0 | 0 |
| Other cust | 4085085 | 0 | 0 | 0 | 0 | 0 | 0 |
| Someone | 1449543 | 0 | 0 | 0 | 0 | 0 | 0 |
| Demo Reseller | 2342 | 0 | 0 | 0 | 0 | 0 | 0 |
+--------------------------------+----------+------+------+--------+------+------+------+
我做错了什么?
最佳答案
这样改
SELECT
c.name,
SUM(IF(MONTH(start) = 1, duration,0)) AS 'Jan',
SUM(IF(MONTH(start) = 2, duration,0)) AS 'Feb',
SUM(IF(MONTH(start) = 3, duration,0)) AS 'Mar',
SUM(IF(MONTH(start) = 4, duration,0)) AS 'Apr',
SUM(IF(MONTH(start) = 5, duration,0)) AS 'Jun',
SUM(IF(MONTH(start) = 6, duration,0)) AS 'Jul',
SUM(IF(MONTH(start) = 7, duration,0)) AS 'Aug'
FROM
call_history ch, client c
WHERE
ch.client_reseller_id = c.id
GROUP BY ch.client_reseller_id
ORDER BY c.name;
关于MySQL 聚合查询未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325309/