我如何GROUP BY多行/列?

时间:2011-09-08 07:52:30

标签: mysql

我正在寻找一种在mysql中分组多个列的方法。 表几乎是:

Customer, Product, Date

Joe, Apple, 2011-01-01
Henry, Banana, 2011-05-26
Sally, Peach, 2011-06-02
Jane, Strawberry, 2010-06-25

我想做的是计算每个客户购买的产品数量,并在一年中将其分组。

所以它看起来像。

COUNT(产品)|一月|二月|三月....... |总

如果我只使用GROUP BY产品,我可以使用MONTH(日期)

Banana, January, 2
Banana, February, 3
Banana, March, 1

等等。

有没有办法做到这一点,以便我获得尽可能多的行,因为我有不同的产品,然后是每个月的一列? 我真的不想在PHP后面这样做,因为它变得非常慢。 非常感谢,已经!

1 个答案:

答案 0 :(得分:1)

SELECT Product,
 SUM(CASE WHEN MONTH(date) =  1 THEN 1 ELSE 0 END) Jan,
 SUM(CASE WHEN MONTH(date) =  2 THEN 1 ELSE 0 END) Feb,
 SUM(CASE WHEN MONTH(date) =  3 THEN 1 ELSE 0 END) Mar,
 SUM(CASE WHEN MONTH(date) =  4 THEN 1 ELSE 0 END) Apr,
 SUM(CASE WHEN MONTH(date) =  5 THEN 1 ELSE 0 END) May,
 SUM(CASE WHEN MONTH(date) =  6 THEN 1 ELSE 0 END) Jun,
 SUM(CASE WHEN MONTH(date) =  7 THEN 1 ELSE 0 END) Jul,
 SUM(CASE WHEN MONTH(date) =  8 THEN 1 ELSE 0 END) Aug,
 SUM(CASE WHEN MONTH(date) =  9 THEN 1 ELSE 0 END) Sep,
 SUM(CASE WHEN MONTH(date) = 10 THEN 1 ELSE 0 END) Oct,
 SUM(CASE WHEN MONTH(date) = 11 THEN 1 ELSE 0 END) Nov,
 SUM(CASE WHEN MONTH(date) = 12 THEN 1 ELSE 0 END) Dec,
 COUNT(date) Total
FROM 
 MyTable
GROUP BY 
 product
相关问题