Return 多次出现的不同结果

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 重复不止一次。

我做了以下查询,但没有return结果:

 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 将 select 不同的值。
  • 然后,使用 HAVING count(*) > 1,仅过滤出现多次的 ID。

P.S。您应该尽量避免在一个查询中使用 DISTINCTGROUP BY。当你这样做时,它会让生活变得更加复杂......

一种方法是在 CTE 中执行 select distinct,然后使用 count window 函数来获得所需的结果:

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;

Fiddle