3

让我们考虑下表 -

ID Score
1  95

2  100

3  88

4  100

5  73

我是一个 SQL 新手,但如何返回具有 ID 2 和 4 的分数?所以它应该返回 100,因为它在 ID 2 和 4 中都有

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”。第二个是计算有多少个“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 回答