首页 > 解决方案 > 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  |

标签: sqlgoogle-bigquery

解决方案


只需做一个GROUP BY. 用于HAVING确保名称只出现一次。用于MIN()选择名称的唯一 ID。

select min(id), name
from tablename
group by name
having count(*) = 1

只读取一次表格将提高性能!(并且不要忘记在 (name, id) 上创建索引。)


推荐阅读