3

次の表を考えてみましょう -

ID Score
1  95

2  100

3  88

4  100

5  73

私はまったくの SQL 初心者ですが、ID 2 と 4 の両方を含むスコアを返すにはどうすればよいですか? ID 2 と 4 の両方で取り上げられているため、100 を返す必要があります。

4

3 に答える 3

8

これは、「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」のスコアのみが返されます。

于 2013-05-23T01:39:39.327 に答える
2
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これは、それが一意の列であると想定しています。

于 2013-05-23T02:14:06.563 に答える
0
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)
    )
于 2018-11-08T01:06:35.533 に答える