mysql - 按日期名称和名称求和表,同时有时间间隔

标签 mysql

我有一个名为“下载”的表,如下所示

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/

相关文章:

PHP & MySQL : Creating your own Prepared statement without using MySQLi and/or PDO

mysql - 使用函数动态生成查询

java.sql.SQLException : Parameter index out of range (1 > number of parameters, 即 0)。我收到这个错误

mysql - 用于在同一个表中搜索值的 SQL 查询

mysql - 在实时测试网站上进行集成测试,测试套件完成后恢复数据

php - 完整性检查 : Will this SQL query join how I want?

mysql - 通过 shell 脚本使用 echo 命令自动化 mysql_secure_installation

mysql - ejabberd 是否支持在 MySQL 数据库中存储 muc 房间信息?

mysql - CONCAT 与 ROLLUP

php - 使用 php mysql 和 jquery 显示数据库动态内容