2014-05-06 36 views
2

我有以下查詢顯示基於性別的人數:顯示行與零值

SELECT gender, 
    count(*) AS count 
FROM persons 
    CROSS JOIN (SELECT count(*) AS total 
       FROM persons) x 
GROUP BY 1 
ORDER BY gender DESC 

隨着作爲結果:

Male | 5 

與零值如何也同樣顯示的行如:

Male | 5 
Female | 0 
+0

男性爲'性別= 1,女性爲0? – Latheesan

+0

SELECT性別的輸出是什麼, count(*)AS count FROM persons GROUP BY 1 ORDER BY性別DESC –

+0

你有一個所有性別的表嗎? –

回答

3

一個簡單的辦法,找出男性的計數/女

SELECT 
    SUM(gender='Male') AS `Male`, 
    SUM(gender='Female') AS `Female` 
FROM persons 
GROUP BY gender 

這將產生像

Male Female 
5  0 

或顯示一行輸出聰明人,你可以使用union

SELECT 'Male' AS gender,COUNT(*) `count` FROM persons WHERE gender='Male' 
UNION 
SELECT 'Female' AS gender,COUNT(*) `count` FROM persons WHERE gender='Female' 

這將輸出作爲

gender count 

Male 5 
Female 0 
+1

+1,因爲那肯定會起作用(好吧,如果這就是場上的情況)。我希望OP有性別表。 –

+1

?? 'SUM(gender ='女')AS女''?你有錯字嗎? –

+1

@OllieJones感謝修正是一個錯字 –

0

好吧,如果你「尋找的東西其實跟性別一樣快,你總是可以用UNION ALL吧。

SELECT [Gender], COUNT(*) [Total] FROM [Persons] WHERE [Gender] = 'Male' GROUP BY [Gender] 

UNION ALL 

SELECT [Gender], COUNT(*) [Total] FROM [Persons] WHERE [Gender] = 'Female' GROUP BY [Gender] 
+1

這應該是** UNION ALL **。讓dbms尋找沒有的副本是沒有意義的。 –

+0

你是對的。現在解決。 – inkieweb