我有一个名为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
我想要的是获取所有男女名字的列表,所以我的查询需要提取表中至少有两个记录的所有名字记录,并且至少有一个M和一个F.
现在已经很晚了,我今晚心情不好。任何人都可以建议一个字符串可以帮助我完成这项任务吗?
答案 0 :(得分:5)
有几种方法可以解决这个问题。一种方法是在COUNT(DISTINCT sex) = 2
子句中使用HAVING
。请务必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'