MySQL查询返回多个求和列和分组列

时间:2013-06-26 16:35:25

标签: mysql sql group-by case

这里提出的问题的第2部分 -

MySQL query to return multiple summed columns

我的SQL表中有以下数据。想象一下,还有更多行跨越多年的数据。

uid    user    category    count    date
--------------------------------------------------
1      henry   RED         4        2013-04-01
2      john    BLUE        3        2013-04-11
4      eric    GREEN       2        2013-04-22
3      alice   RED         5        2013-05-01
5      eric    BLUE        2        2013-05-12
6      john    RED         3        2013-05-23
7      henry   GREEN       2        2013-06-03
8      eric    RED         3        2013-06-08
9      john    BLUE        5        2013-07-11
... (more) ...

我想要一个查询,它会返回以下数据,根据日期按列分组。我知道如何使用GROUP BY命令将数据分组为行。但我不确定如何按列进行。

category    May 2013     April 2013  ... (more)
------------------------------------
RED         8            4           
BLUE        2            3     
GREEN       0            2

我意识到,就使用日期和时间功能而言,可能有很多选项。我只是想了解如何为SQL设置逻辑给我一个任意数量的列的基本结构。

3 个答案:

答案 0 :(得分:0)

你应该尝试按案例求和(当不是真时总和0)。如下所示:

SELECT 
   ...
   SUM(CASE WHEN date BETWEEN ... AND ... THEN 'count' ELSE 0 END) as 'May 2013',
   SUM(CASE WHEN date BETWEEN ... AND ... THEN 'count' ELSE 0 END) as 'April 2013',
   etc.
FROM ...,
GROUP BY category

答案 1 :(得分:0)

我认为你必须使用过程语言我的SQL来循环月/年。

答案 2 :(得分:0)

尝试这样的事情:

SELECT 
  category,
  SUM(CASE WHEN date BETWEEN '2013-05-01' AND '2013-06-01' THEN count ELSE 0 END) AS 'May 2013',
  SUM(CASE WHEN date BETWEEN '2013-04-01' AND '2013-05-01' THEN count ELSE 0 END) AS 'April 2013',
  ... (more)   
FROM dbtable
GROUP BY category