mysql - 使用 DATE_FORMAT() 和 IN 获取总和

标签 mysql sql

我有一个查询,看起来有点像这样:

SELECT sum(X) as qty 
FROM ...
WHERE ...
AND DATE_FORMAT(date,'%Y%m%d') IN (20100601,20100701,20100801,20100901,20101001)

这显然给了我一个看起来像这样的结果:

qty
226761

但我想要得到的是每个单独日期格式的数量:

qty      date
16000   20100601
57000   20100701
23000   20100801
30000   20100901
72000   20101001

我是 SQL 新手,所以我不知道如何获取该特定格式。我只是在寻求算法的帮助,您可以使用我不介意的随机表名称或行名称。我希望我的问题很清楚!

最佳答案

您需要一个GROUP BY:

SELECT date(date), sum(X) as qty 
FROM ...
WHERE ... AND
      date(date) IN ('2010-06-01', '2010-07-01', '2010-08-01', '2010-09-01', '2010-10-01')
GROUP BY date(date);

您会注意到我删除了date_format()。将日期转换为字符串是一个坏习惯,没有必要这样做。如果 date 没有时间组件(如其名称所示),则甚至不需要 date()

编辑:

使用date_format()表明您的日期存储为日期。如果这不是真的,那么您可以简单地执行以下操作:

SELECT date, sum(X) as qty 
FROM ...
WHERE ... AND
      date IN ('20100601', '20100701', '20100801', '20100901', '20101001')
GROUP BY date;

如果日期是数字,请删除单引号。

关于mysql - 使用 DATE_FORMAT() 和 IN 获取总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632305/

相关文章:

mysql - 在 mysql 5.7 中转换 rank() over (partition ....

php - 从开始日期到结束日期,打印第三个变量的计数

mysql - 使用 NOT IN 子查询更新时出错

sql - 计算共享同一父代的不同 ID 的数量

sql - 从 Oracle 中的字符串中删除重音符号

php - 触发邮件发送至对应邮箱地址

php - 使用 PHP 和 MySQL 优化排名页面

mysql - 查找表的最常见值

java - 使用map缓存sql中的数据(其中<=时间戳col)

mysql - 投票表的最佳索引是什么?