sql - SQL 选择行,其中列值是唯一的(只出现一次)
问题描述
鉴于表
| id | Name |
| 01 | Bob |
| 02 | Chad |
| 03 | Bob |
| 04 | Tim |
| 05 | Bob |
我想从名称唯一的行中选择名称和 ID(仅出现一次)
这与如何从表中选择列的唯一值基本相同?, 但请注意作者不需要 id, 所以这个问题可以通过 aGROUP BY name HAVING COUNT(name) = 1
但是,我需要提取包括 id 在内的整行(可能是数十或数百列) where COUNT(name) = 1
,但我不能GROUP BY id, name
因为它们的每个组合都是唯一的。
编辑:
我正在使用 Google BigQuery。
预期成绩:
| id | Name |
| 02 | Chad |
| 04 | Tim |
解决方案
只需做一个GROUP BY
. 用于HAVING
确保名称只出现一次。用于MIN()
选择名称的唯一 ID。
select min(id), name
from tablename
group by name
having count(*) = 1
只读取一次表格将提高性能!(并且不要忘记在 (name, id) 上创建索引。)
推荐阅读
- regex - 是否有正则表达式代码来组合我必须在上方查看并在一行之间查看的代码?
- java - 如何在 SwaggerUI 中显示来自父项目的端点
- kotlin - 如何在 Kotlin 多平台项目中使用 @SerializedName?
- javascript - 隐藏溢出的水平文本滑块
- mysql - Mysql 分区查询性能
- javascript - 重复功能实现
- python - Python在运行OpenCV时随机退出而不抛出异常
- c - 如何在ac程序中启用或禁用关键字的字符
- angular - 如何为 mat-paginator 设置条件语句?
- javascript - 是否可以使用 JQuery 或 JavaScript 给类和标题小写字母?