SQL查询帮助需要在表中加入

时间:2013-02-17 02:28:57

标签: 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

我想要的是获取所有男女名字的列表,所以我的查询需要提取表中至少有两个记录的所有名字记录,并且至少有一个M和一个F.

现在已经很晚了,我今晚心情不好。任何人都可以建议一个字符串可以帮助我完成这项任务吗?

1 个答案:

答案 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'

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