首页 > 解决方案 > SQL:过滤掉列值出现多次的行

问题描述

我有一个如下所示的 MySQL 表:

id    |    label
----------------
1          "john"
1          "henry"
1          "sara"
2          "henry"
3          "tim"

所以一个给定的id可以有多个labels。我只想保留id具有单个label. 所以上表的正确输出是:

id    |    label
----------------
2          "henry"
3          "tim"

我在想我应该分组id并找到每个标签的数量id。然后我只取计数为 1 的行。

WITH temp as
(SELECT id
FROM original_table
GROUP BY id
HAVING COUNT(id) > 5)

SELECT *
FROM original_table ot
WHERE ot.id in temp.id

这看起来很接近吗?

谢谢!

标签: mysqlsql

解决方案


我认为聚合是最简单的方法:

select id, min(label) as label
from original_table t
group by id
having count(*) = 1;

推荐阅读