1

我有一个名为的表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 的所有名字记录。

时间不早了,今晚我的脑子不太好。谁能建议一个可以帮助我完成这项任务的字符串?

4

1 回答 1

5

有几种方法可以处理这个问题。一种是COUNT(DISTINCT sex) = 2HAVING子句中使用 a 。一定要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

于 2013-02-17T02:33:42.390 回答