如何在多个不同的列上应用count函数并使用having子句

7
我想做类似的事情,但出现了错误,请推荐一些好的方法?
select A,B,C, count(Distinct A,B,C)
from table_name 
group by A,B,C 
having count(Distinct A,B,C) > 1 

我在(A,B,C)列上建立了索引,但某些行并没有设置这个唯一组合,因此我正在尝试查询类似于识别违反唯一约束条件的行。请告诉我是否有更好的方法。

2个回答

17
如果您按这些列分组,那么您已经只得到了那些唯一的记录,然后您可以使用 count(*) 来获取您有多少个重复项。
select A,B,C, count(*) 
from table_name 
group by A,B,C 
HAVING count(*) > 1

3

@jurgend 说得对,你可以进一步通过执行来找到确切的行(我假设还有更多要查看的字段,包括可能是 PK)

SELECT * 
FROM table_name 
WHERE (A,B,C) IN ( 
    SELECT A, B, C 
    FROM table_name
    GROUP BY A, B, C
    HAVING COUNT(*) > 1
)

Tuple IN列表查询在Oracle中可用,但不是所有其他DBMS都可用。


它在postgresql中运行良好,我刚测试过。谢谢。 - OJVM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接