我有一个名为“下载”的表,如下所示
id date name quantity
1 2015-05-13 23:30:09 CRCP03 - Cartoon Race Car Pack 03 1
2 2015-05-14 00:30:09 CRCPV2-01 - Cartoon Race Cars Pack V2 - 01 1
3 2015-05-14 17:10:06 CRCP03 - Cartoon Race Car Pack 03 1
4 2015-05-15 23:47:07 CRCPV2-01 - Cartoon Race Cars Pack V2 - 01 1
5 2015-05-16 03:31:06 CRCP03 - Cartoon Race Car Pack 03 1
6 2015-05-17 13:13:06 CRCP03 - Cartoon Race Car Pack 03 1
7 2015-05-18 00:32:06 CRCPV2-01 - Cartoon Race Cars Pack V2 - 01 1
我想按DAYNAME
对所有“name”
进行SUM
,同时有一个间隔DATE_SUB(curdate(), INTERVAL 1月)
。
还要注意名称的总和
目前我拥有的是这个
SELECT name, SUM(quantity), DAYNAME(d.date) AS weekday
FROM downloads d
GROUP BY WEEKDAY(d.date)
/*// This does not work I get a fetch_assoc error also does not have a time interval
SELECT WEEKDAY(d.date) AS weekday,
SUM(CASE WHEN d.name = 'CRCP03 - Cartoon Race Car Pack 03' THEN 1 ELSE 0 END) AS a,
SUM(CASE WHEN d.name = 'CRCPV2-01 - Cartoon Race Cars Pack V2 - 01' THEN 1 ELSE 0 END) AS b,
FROM downloads d
GROUP BY WEEKDAY(d.date) */
我得到了这种混合结果,没有间隔
Monday - CRCP03 - Cartoon Race Car Pack 03 - 70
Tuesday - CRCPV2-01 - Cartoon Race Cars Pack V2 - 01 - 72
Wednesday - CRCP03 - Cartoon Race Car Pack 03 - 89
Thursday - CRCP03 - Cartoon Race Car Pack 03 - 77
Friday - CRCP03 - Cartoon Race Car Pack 03 - 70
Saturday - CRCP03 - Cartoon Race Car Pack 03 - 68
Sunday - CRCPV2-01 - Cartoon Race Cars Pack V2 - 01 - 49
感谢任何人提供帮助
最佳答案
要获取每个名称在每个工作日出现的次数,您可以使用已有的聚合,但按名称和工作日进行分组:
SELECT DAYNAME(dateColumn) AS weekDay, name, SUM(quantity) AS totalCount
FROM downloads
GROUP BY DAYNAME(dateColumn), name;
要仅选择某个时间间隔,您只需添加一个 where 子句即可。例如,如果我只想在五月执行此操作:
SELECT DAYNAME(dateColumn) AS weekDay, name, SUM(quantity) AS totalCount
FROM downloads
WHERE dateColumn BETWEEN '2015-05-01' AND '2015-05-31'
GROUP BY DAYNAME(dateColumn), name;
如果您想并排查看名称,每一行代表一个工作日,则需要查看数据透视表,这很难做到。但是,如果您知道行名称,则可以使用条件聚合:
SELECT DAYNAME(dateColumn) AS weekday,
SUM(name = 'CRCPV2-01 - Cartoon Race Cars Pack V2 - 01') AS 'CRCPV2-01 - Cartoon Race Cars Pack V2 - 01',
SUM(name = 'CRCP03 - Cartoon Race Car Pack 03') AS 'CRCP03 - Cartoon Race Car Pack 03'
FROM downloads
WHERE dateColumn BETWEEN '2015-05-01' AND '2015-05-31'
GROUP BY DAYNAME(dateColumn);
这两个查询都可以在 SQL Fiddle 中看到。 .
关于mysql - 按日期名称和名称求和表,同时有时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012899/