2011-09-08 87 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