次の表を考えてみましょう -
ID Score
1 95
2 100
3 88
4 100
5 73
私はまったくの SQL 初心者ですが、ID 2 と 4 の両方を含むスコアを返すにはどうすればよいですか? ID 2 と 4 の両方で取り上げられているため、100 を返す必要があります。
次の表を考えてみましょう -
ID Score
1 95
2 100
3 88
4 100
5 73
私はまったくの SQL 初心者ですが、ID 2 と 4 の両方を含むスコアを返すにはどうすればよいですか? ID 2 と 4 の両方で取り上げられているため、100 を返す必要があります。
これは、「sets-within-sets」クエリの例です。having
最も柔軟なアプローチであるため、句を使用した集計をお勧めします。
select score
from t
group by score
having sum(id = 2) > 0 and -- has id = 2
sum(id = 4) > 0 -- has id = 4
これが行っているのは、スコアによる集計です。次に、having
句の最初の部分 ( sum(id = 2)
) は、スコアごとにいくつの「2」があるかを数えています。2 つ目は、"4" の数を数えています。「2」と「4」のスコアのみが返されます。
SELECT score
FROM t
WHERE id in (2, 4)
HAVING COUNT(*) = 2 /* replace this with the number of IDs */
これにより、ID が 2 と 4 の行が選択されます。このHAVING
句は、両方の行が見つかったことを確認します。いずれかが欠落している場合、カウントは 2 未満になります。
id
これは、それが一意の列であると想定しています。
select Score
from tbl a
where a.ID = 2 -- based off Score with ID = 2
--include Score only if it exists with ID 6 also
and exists (
select 1
from tbl b
where b.Score = a.Score and b.ID = 6
)
-- optional? ignore Score that exists with other ids as well
and not exists (
select 1
from tbl c
where c.Score = a.Score and c.ID not in (2, 6)
)