在Oracle Sql中查找重复值

时间:2014-10-03 15:08:37

标签: sql

我有一张如下表格。

Id      amount
--------------
10.     12345
10.     12345
12.     34567 
13.     34567

根据我的业务要求,相同金额的同一ID不是重复记录。具有相同数量的不同ID是重复记录。希望你理解这个要求。

在上面的示例记录中,我必须获得重复的金额值及其计数,同时Id应该是不同的。

预期的查询结果为34567,计为2。

1 个答案:

答案 0 :(得分:2)

如果您还需要显示ID,

SELECT a.*
FROM 
(
  SELECT id, amount, count(1) OVER (PARTITION BY amount) num_dup
  FROM table1
)a
WHERE a.num_dup >1

<强>更新即可。如果您只关心不同的ID,请使用COUNT(DISTINCT id)代替COUNT(1)

更多示例
加入另一张表

SELECT a.*
    FROM 
    (
      SELECT a.id, a.amount, 
        count(distinct a.id) OVER (PARTITION BY a.amount) num_dup
      FROM table1 a
      INNER JOIN table2 b ON (b.id = a.id)    
    )a
    WHERE a.num_dup >1

没有窗口功能且没有table1.id:

SELECT a.amount, count(distinct a.id)
FROM table1 a
INNER JOIN table2 b ON (b.id = a.id)
GROUP BY a.amount
HAVING count(distinct a.id) >1 ;

没有窗口功能和table1.id:

SELECT b.* 
FROM 
(
SELECT a.amount, count(distinct a.id)
FROM table1 a
INNER JOIN table2 b ON (b.id = a.id)
GROUP BY a.amount
HAVING count(distinct a.id) >1 
)a
INNER JOIN table1 b ON (b.amount = a.amount)