2013-02-17 39 views
1

我有一個叫babynames表看起來升技這樣的:SQL查詢幫助需要在表格中加入

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

我想要做的就是讓那些女性和男性的所有寶寶名字的列表,所以我的查詢需要扳指在表中至少有兩個記錄,並至少有一個M和一個F.

已經很晚了,我的頭腦都不盡如人意今晚所有的名字記錄。任何人都可以建議一個字符串,可以幫助我實現這個任務?

回答

5

有幾種方法來處理這個問題。一會是HAVING子句中使用COUNT(DISTINCT sex) = 2。一定要GROUP BY firstname

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

這裏有一個演示:http://sqlfiddle.com/#!2/5d221/1

另一個辦法的INNER JOIN對2別名同一個表,其中一個尋找M而其他驗看F的。如果名字沒有被這兩個條件相匹配,連接不能被製成,它會被排除在輸出。

SELECT 
    DISTINCT 
    m.firstname 
FROM 
    babynames f 
    INNER JOIN babynames m ON f.firstname = m.firstname 
WHERE 
    f.sex = 'F' 
    AND m.sex = 'M' 

http://sqlfiddle.com/#!2/5d221/3

+0

謝謝你,謝謝你! – DRL 2013-02-17 11:23:53

+0

我注意到,第一個選項跑快很多,但是都產生相同的結果。感謝您的不同選擇。 – DRL 2013-02-17 11:36:26

+0

@ user2079652如果您在'firstname'和'sex'之間建立一個複合索引,那麼兩者之間的表現可能會非常相似。 – 2013-02-17 13:05:22