sql - 返回多次出现的不同结果

我有以下数据:

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

回答1

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
)

请参阅:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=931766218059a48489c5e148fc4e9a17

  • SELECT ID, site FROM table1 GROUP BY ID, site 将选择不同的 values。
  • 然后,使用 HAVING count(*) > 1,只过滤多次出现的 ID。

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

回答2

一种方法是在 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;

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=85087768be683e42d9e620ec82492c31

相似文章

最新文章