使用DATE_FORMAT()和IN获取总和

时间:2019-02-11 14:04:50

标签: 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的新手,所以我不知道如何获取该特定格式。我只是在寻找算法的帮助,您可以使用不介意的随机表名或行名。希望我的问题清楚!

2 个答案:

答案 0 :(得分:1)

您需要一个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;

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

答案 1 :(得分:0)

您需要按DATE_FORMAT(date,'%Y%m%d')

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