2012-12-18 18 views
1

我想要顯示像這樣的數據我在哪裏GROUPDATEMySql的多列從單列表選擇與分組

Date  Star1 Star2 Star3 Star4 Star5 
2012-10-25 null null null  1  1 

我目前的表有三(3)列,顯示:

ID DATE  RATING 
5 2012-10-25 4 
6 2012-10-25 5 

我使用此查詢來嘗試實現上述數據:

SELECT 
    DATE, 
    CASE 
     WHEN RATING = 1 THEN 1 
     ELSE NULL 
    END AS STAR1, 
    CASE 
     WHEN RATING = 2 THEN 1 
     ELSE NULL 
    END AS STAR2, 
    CASE 
     WHEN RATING = 3 THEN 1 
     ELSE NULL 
    END AS STAR3, 
    CASE 
     WHEN RATING = 4 THEN 1 
     ELSE NULL 
    END AS STAR4, 
    CASE 
     WHEN RATING = 5 THEN 1 
     ELSE NULL 
    END AS STAR5 
FROM 
    table1 
WHERE 
    DATE = '2012-10-25' 
GROUP BY DATE 
ORDER BY DATE 

這隻能吐出一個等級壽:

Date  Star1 Star2 Star3 Star4 Star5 
2012-10-25 null null null null  1 

它像它不是在日期分組,我怎麼能做到這一點?

回答

3

MySQL允許這樣的查詢有點令人驚訝,因爲GROUP BY並未涵蓋SELECT列表中的所有非聚合列。

如果你換你的CASE語句爲計數,那麼我想你會與你想要的結束:

SELECT 
    DATE, 
    COUNT(CASE 
     WHEN RATING = 1 THEN 1 
     ELSE NULL 
    END) AS STAR1, 
    COUNT(CASE 
     WHEN RATING = 2 THEN 1 
     ELSE NULL 
    END) AS STAR2, 
    COUNT(CASE 
     WHEN RATING = 3 THEN 1 
     ELSE NULL 
    END) AS STAR3, 
    COUNT(CASE 
     WHEN RATING = 4 THEN 1 
     ELSE NULL 
    END) AS STAR4, 
    COUNT(CASE 
     WHEN RATING = 5 THEN 1 
     ELSE NULL 
    END) AS STAR5 
FROM 
    table1 
WHERE 
    DATE = '2012-10-25' 
GROUP BY DATE 
ORDER BY DATE 

請讓我知道你是怎麼用這種方法做的。

+0

這工作謝謝你! – ToddN

+0

太棒了!很高興我能幫上忙。 – MikeB

1
SELECT 
DISTINCT DATE, 
(SELECT COUNT(RATING) FROM Table1 WHERE RATING = '1') AS Star1, 
(SELECT COUNT(RATING) FROM Table1 WHERE RATING = '2') AS Star2, 
(SELECT COUNT(RATING) FROM Table1 WHERE RATING = '3') AS Star3, 
(SELECT COUNT(RATING) FROM Table1 WHERE RATING = '4') AS Star4, 
(SELECT COUNT(RATING) FROM Table1 WHERE RATING = '5') AS Star5 
FROM 
Table1 
WHERE 
DATE = '2012-10-25' 
GROUP BY DATE 
ORDER BY DATE 
+0

您不希望(或需要)在這裏使用DISTINCT子句。如果你打算使用子選擇,你想確保它們是相關的。 – MikeB

+0

但它有效=) – Gutenberg