提问人:FrancoisDuCoq 提问时间:10/26/2023 最后编辑:marc_sFrancoisDuCoq 更新时间:10/27/2023 访问量:54
在 SQL 中,筛选其他列中只有一个值的 ID
In SQL, filter IDs with only one value in other column
问:
假设我们有一个表,在 SQL Server 表中包含 2 列:MyTable
编号 | 排 |
---|---|
1 | 一个 |
1 | b |
1 | s |
1 | w |
2 | s |
2 | s |
3 | w |
.. | .. |
如何找到所有在排名列中只有值,而没有其他排名的ID?'s'
我希望结果是
编号 | 排 |
---|---|
2 | s |
答:
3赞
SelVazi
10/26/2023
#1
我们可以使用 和 子句:group by
having
每个 ID 的总数应与所有行的总计数匹配。rank='s'
SELECT ID --, 's' as rank
FROM mytable
GROUP BY ID
HAVING count(CASE WHEN rank = 's' THEN 1 END) = COUNT(*)
评论
1赞
Charlieface
10/26/2023
或者如评论中提到的HAVING count(case when rank <> 's' then 1 end) = 0
1赞
SelVazi
10/27/2023
仅当列排名不包含 null 值时,它才有效 dbfiddle.uk/J6h5CAYv
0赞
Slava Rozhnev
12/7/2023
#2
select distinct * from mytable
where not exists (
select 1 from mytable mytable_copy where rank <> 's' and mytable_copy.ID = mytable.ID
);
评论
HAVING count(distinct rank) = 1
,如果您希望 ID 只有一个不同的排名值,则 S 或其他。 查找只有 S 等级的 ID。HAVING count(case when rank <> 's' then 1 end) = 0