首页 > 解决方案 > 显示组计数为 1 的额外列

问题描述

假设我有一个Students只有 2 列的表,LastName并且FirstName. 我知道我可以得到所有LastName只有 1 的 s FirstName

select LastName from Students group by LastName having count(*) = 1

但是,如果我还想显示这些行的名字怎么办?

标签: sqlgroup-bycountsubquerywindow-functions

解决方案


您可以使用相关子查询进行过滤:

select s.* 
from students s
where (select count(*) from students s1 where s1.LastName = s.LastName) = 1

或者,如果您有一个主列,您可以使用not exists

select s.*
from student s
where not exists (
    select 1 from students s1 where s1.LastName = s.LastName and s1.id <> s.id
)

此查询将利用(id, LastName).

最后,另一个常见的选择是进行窗口计数:

select *
from (select s.*, count(*) over(partition by LastName) cnt from students s) t
where cnt = 1

推荐阅读