2012-07-14 55 views
3

考慮下面的表如何從一個MySQL列輸出多列?

tweets 
--------------------------------- 
tweet_id nyse_date class type 
--------------------------------- 
1   2011-03-12 2  0 
2   2011-03-12 1  1 
3   2011-03-12 1  0 
4   2011-03-12 1  0 
5   2011-03-12 0  0 
6   2011-03-12 1  0 
7   2011-03-12 3  2 
8   2011-03-12 3  0 

每個鳴叫賦予一個「類」,其是1,2或3,「類型」,是0,1或2。我想有概要在每個類和類型的鳴叫的次數,如下所示:

nyse_date class1 class2 class3 type0 type1 type2 
------------------------------------------------------- 
2011-03-12 3  1  2  6  1  1 

我開始用下面的查詢(按日期分組,因爲真正的表有很多不同的日期):

SELECT 
    nyse_date, 
    COUNT(class) AS class1 FROM tweets WHERE class = 1, 
    COUNT(class) AS class2 FROM tweets WHERE class = 2 
GROUP BY 
    nyse_date ASC 

預期產量

nyse_date class1 class2 
-------------------------- 
2011-03-12 3  1  

,但我得到了一個錯誤信息。我相信這與我只能在每個查詢中使用一個WHERE子句(而且我正在使用2)有關,但我不知道替代方法是什麼。你做?

任何幫助是極大:-)

回答

6

試試這個:

SELECT 
    nyse_date, 
    SUM(class = 1) AS class1, 
    SUM(class = 2) AS class2, 
    SUM(class = 3) AS class3 
FROM 
    tweets 
GROUP BY 
    nyse_date ASC 

class = 1是一個布爾表達式,其中evalues爲TRUEFALSE。 A TRUE等於1。因此,使用SUM實際上意味着「計算所有條件成立的行」

+0

這太棒了,謝謝:-)使用這種技術,例如,是否也可以計算類1中的類型爲0的推文?所以基本上'... SUM(type = 0 AND class = 1)AS type0class1'? – Pr0no 2012-07-14 13:58:55

+1

確實如此。繼續開始玩吧! – 2012-07-14 13:59:53

0

這是行不通的嗎?

SELECT nyse_date, SUM(IF(class =1, 1, 0)) AS class1, SUM(IF(class =2, 1, 0)) AS class2 
FROM tweets 
GROUP BY nyse_date