[英]Return distinct results that appear more than once
我有以下数据:
ID Site
2 NULL
2 32
3 6
4 7
8 12
8 13
9 14
9 14
结果应该是:
ID Site
2 NULL
2 32
8 12
8 13
请注意,结果会找到 ID 和站点的唯一组合,这些组合对于给定 ID 重复多次。
我做了以下查询,但没有返回结果:
select distinct id, site
from Table1
group by id, site
having count(*) > 1
order by id
SELECT
ID,
site
FROM table1
WHERE ID IN (
SELECT ID
FROM (
SELECT ID ,site
FROM table1
GROUP BY ID ,site
) x
GROUP BY ID
HAVING count(*)>1
)
请参阅: DBFIDDLE
SELECT ID, site FROM table1 GROUP BY ID, site
将选择不同的值。HAVING count(*) > 1
,仅过滤出现多次的 ID。 PS 你应该尽量避免在一个查询中使用DISTINCT
和GROUP BY
。 当你这样做时,它会让生活变得更加复杂......😉
一种方法是在 CTE 中执行select distinct
,然后使用count
窗口函数来获得所需的结果:
with u as (
select distinct *
from Table1
), v as (
select *
, count(*) over(partition by ID) as cnt
from u
)
select ID, Site
from v
where cnt > 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.