我有一个mysql表,如下所示:
id | label
----------------
1 "john"
1 "henry"
1 "sara"
2 "henry"
3 "tim"
因此,一个给定的 id
可以有多个 label
s。我只想保留 id
有一个单身汉 label
. 因此上表的正确输出是:
id | label
----------------
2 "henry"
3 "tim"
我在想我应该分组 id
并找出每个标签的数量 id
. 那我就只取一行。
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
看起来很近吗?
谢谢!
5条答案
按热度按时间t0ybt7op1#
您可以仅使用联接来包含在子查询中出现一次的id:
或者你可以用一个
IN
条款:cgvd09ve2#
你可以试试这个:
prdp8dxp3#
假设两人
id
以及label
是独一无二的,你可以用NOT EXISTS
以及相关子查询。czq61nw14#
是的,您的方法是正确的,您可能需要更改having count条件,并且在引用cte时,您可能需要稍微更改您的语法,但是您也可以在没有cte的情况下使用exists条件在同一行中完成。
输出:
zbq4xfa05#
我认为聚合是最简单的方法: