2011-09-08 94 views
0

我正在寻找一种方法来分组在mysql中的多个列。 表是相当多:如何GROUP BY多个行/列?

Customer, Product, Date 

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

我想要做的是在今年的月统计每个顾客买Produkts的数量和组。

所以它看起来像。

COUNT(Product)|一月|二月| 3月....... |总

如果我只是使用GROUP BY产品,MONTH(日期)我得到

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

等。

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

+0

它不是要快得多做到在MySQL的... –

+0

...而且会有很多领域 - 对每月和每年 – Devart

+0

它只有永远会是一年。 – ldrocks

回答

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 
+0

OMG,这是完美的:-) 和0.1074秒:)谢谢! ;-) – ldrocks

+0

很高兴帮助你! – CristiC