我有一个名为babynamesabit 的表,如下所示:
firstname |sex |year |count
Bob |M| 2010| 150
Bob |M| 2009| 100
Bob |M| 2008| 122
Bob |F| 2007| 2
Bob |F| 2001| 1
Run Code Online (Sandbox Code Playgroud)
我想要做的是获得所有男女名字的列表,所以我的查询需要提取表中至少有两个记录的所有名字记录,并且至少有一个M和一个F.
现在已经很晚了,我今晚心情不好.任何人都可以建议一个字符串可以帮助我完成这项任务吗?
有几种方法可以解决这个问题.一种是COUNT(DISTINCT sex) = 2在HAVING条款中使用a .一定要GROUP BY firstname.
SELECT
firstname
FROM babynames
GROUP BY firstname
HAVING COUNT(DISTINCT sex) = 2
Run Code Online (Sandbox Code Playgroud)
这是一个演示: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'
Run Code Online (Sandbox Code Playgroud)
http://sqlfiddle.com/#!2/5d221/3