2012-10-28 31 views
2

我有如下表:MySQL的多個計數

+----+----------+------------+ 
| id | drink | gender  | 
+----+----------+------------+ 
| 1 | Beer  | m   | 
| 2 | Milk  | f   | 
| 3 | Milk  | f   | 
| 4 | Tea  | m   | 
+----+----------+------------+ 

現在我想指望其性別偏好哪些飲料。結果應該如下所示:

+-------+-------+--------+ 
| drink | fem | male | 
+-------+-------+--------+ 
| Beer | 0  | 1  | 
| Milk | 2  | 0  | 
| Tea | 0  | 1  | 
+----+----------+--------+ 

有沒有人有想法?

在此先感謝您的建議。

回答

4
SELECT drink, 
     SUM(CASE WHEN gender = 'f' THEN 1 ELSE 0 END) fem, 
     SUM(CASE WHEN gender = 'm' THEN 1 ELSE 0 END) male 
FROM tableName 
GROUP BY drink 

SQLFiddle Demo

上述查詢可以進一步被轉換成準備的語句。例如,如果您設法爲性別添加另一個值(例如:u for unisex),而不修改原始查詢,這會很有幫助。例如,

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'SUM(case when gender = ''', 
     gender, 
     ''' then 1 ELSE 0 end) AS ', 
     gender 
    ) 
) INTO @sql 
FROM tableName; 

SET @sql = CONCAT('SELECT drink, ', @sql, ' 
        FROM tableName 
        GROUP BY drink'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

SQLFiddle Demo

+0

吳宇森,你真棒!非常感謝你! – olk

+0

@olk歡迎:) –