2013-02-18 30 views
1

這是我的第二篇帖子,涉及到我的加入。現在我想有一個具有計數的男性和女性的總和表...需要SQL查詢幫助加入並計算表內

我有一個叫babynames表看起來升技這樣的:

firstname |sex |year |count 
Bob |M| 2010| 150 
Bob |M| 2009| 100 
Bob |M| 2008| 122 
Bob |F| 2007| 2 
Bob |F| 2001| 1 

我已經能夠算上這是男性和女性與此查詢

SELECT 
    firstname, sum(count), sex 
FROM babynames 
GROUP BY firstname 
HAVING COUNT(DISTINCT sex) = 2 

導致表中的所有嬰兒的名字:

bob|375|M 

是接近我想要的東西....但

SELECT 
    firstname, sum(count), sex 
FROM babynames GROUP BY firstname, sex 

給我的結果:

bob|372|M 
bob|3|F 

現在,我需要得到兩全其美的,這樣我的表只有姓名其中,性別匹配和理想看起來是這樣的:

firstname|male count| female count 
bob |372|3 

雖然我承認我需要一些練習用SQL,我會很感激一些幫助一起拉此查詢。謝謝!!

+0

感謝格式化JW - 我會確保在未來更好的格式我的問題。 – DRL 2013-02-18 18:37:13

回答

3
SELECT firstname, 
     SUM(CASE WHEN sex = 'm' THEN count END) MaleCount, 
     SUM(CASE WHEN sex = 'f' THEN count END) FemaleCount 
FROM babynames 
GROUP BY firstname 
+1

OMG感謝鏈接到SQLFiddle :) – 2013-02-18 16:18:48

+0

@RichardBrown對不對? ':D' – 2013-02-18 16:19:14

+0

做得好!我現在只需要過濾出空值,我是金!非常感謝! – DRL 2013-02-18 17:12:21

0

嘗試是這樣的:

select firstname, sum(malecount) males, sum(femalecount) females 
from 
(select 'boys' gender 
,firstname 
, 0 femalecount 
, count(*) malecount 
from babynames 
where sex = 'male' 
group by 'boys, firstname, 0 
union 
similar query for girls 
) temp 
group by firstname 
+0

我沒有拒絕建議的編輯,但編輯不正確。 'SUM(CASE WHEN 1 = ELSE 0 END)'不是具有SUM(COUNT)的sam http://stackoverflow.com/review/suggested-edits/1546281 – 2013-02-18 16:28:04