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

私がやりたいのは、女性と男性の両方であるすべての赤ちゃんの名前のリストを取得することです。そのため、テーブルに少なくとも 2 つのレコードがあり、少なくとも 1 つの M と 1 つの F であるすべての firstname レコードをクエリで取得する必要があります。

遅くなってきたし、今夜は頭がよく働いていない。このタスクを達成するのに役立つ可能性のある文字列を誰かが提案できますか?

4

1 に答える 1

5

これを処理するにはいくつかの方法があります。COUNT(DISTINCT sex) = 21 つは、HAVING節でa を使用することです。必ずGROUP BY firstname.

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

ここにデモがあります:http://sqlfiddle.com/#!2/5d221/1

もう 1 つはINNER JOIN、同じテーブルの 2 つのエイリアスに対して、1 つは を探し、Mもう1 つは を探し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 に答える