使用count distinct来查找字段中具有2个或更多不同值的记录

时间:2012-09-21 16:09:50

标签: sql oracle count aggregate-functions

我有一个简单的问题:如何在SQL中使用Count(Distinct)(确切地说是Oracle)只返回给定字段中有两个或更多不同值的行。

通过示例更容易理解:

ACCOUNT     SALESMAN
123         Abc
123         Abc

246         Abc
246         Def
246         Def

369         Hij

456         Abc
456         Def

在此示例中,只有2个不同销售代表的帐户将是246和456,因此,我希望查询的结果只显示由2个或更多销售人员共享的帐户:

ACCOUNT     SALESMAN
246         Abc
246         Def
456         Abc
456         Def

感谢。

3 个答案:

答案 0 :(得分:7)

使用having

select distinct account,salesman 
from MyTable where account in
(
    select account
    from MyTable
    group by account
    having count(distinct salesman) >= 2
)
order by 1,2

这是demonstration

答案 1 :(得分:5)

正如另一个答案所示,您需要使用HAVING,但不是在指定的庄园中。使用HAVING

后,您需要加入原始表格
SELECT  DISTINCT T.Account, T.SalesMan
FROM    T
        INNER JOIN
        (   SELECT  Account
            FROM    T
            GROUP BY Account
            HAVING COUNT(DISTINCT SalesMan) > 1
        ) Dupes
            ON Dupes.Account = T.Account

<强> SQL Fiddle

答案 2 :(得分:1)

您可以使用简单的GROUP BY / HAVING查询执行此操作:

select account
from t
group by account
having count(distinct salesperson) > 1

这将返回帐户,因此结果与您指定的结果不同。吸引销售人员的一种方法是使用listagg:

select account, listagg(salesperson, ',')
from t
group by account
having count(distinct salesperson) > 1

否则,Gareth的回答会按照您在问题中指定的方式返回结果。