sql - 显示组计数为 1 的额外列
问题描述
假设我有一个Students
只有 2 列的表,LastName
并且FirstName
. 我知道我可以得到所有LastName
只有 1 的 s FirstName
:
select LastName from Students group by LastName having count(*) = 1
但是,如果我还想显示这些行的名字怎么办?
解决方案
您可以使用相关子查询进行过滤:
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
推荐阅读
- c# - 具有相同类和相同类列表的 C# 泛型
- rust - 如何在 Rust 中获取进位标志的值
- jquery - 从远程 url 使用 JSON 创建 Dyantable
- firebase - 列表的 MapView.Markers 未在渲染时显示
- kubernetes - 在 Kubernetes 集群中运行的服务之间的 JWT 身份验证
- php - php读取文件夹中的.txt文件,然后计算换行符
- python - ImportError: libcublas.so.9.0 for tensorflow in jupyter notebook
- typescript - 是否有一种自动、更高效、更快捷的方式来导出所有模块?
- c++11 - pop_front() 出现错误“只读对象中的成员分配”
- reactjs - 只要在我的 React JS 应用程序中调用任何函数,Youtube 视频就会自动停止