如何在多个不同的列上应用Count并使用Having子句

时间:2014-06-02 22:22:20

标签: sql oracle count indexing distinct

我想做类似的事情,但是出错会请提出一些好的方法吗?

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 个答案:

答案 0 :(得分:10)

如果您按这些列进行分组,那么您只能获取这些唯一记录,然后您可以使用count(*)来获取您拥有的重复数量

select A,B,C, count(*) 
from table_name 
group by A,B,C 
HAVING count(*) > 1

答案 1 :(得分:2)

@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。