包含COUNT DISTINCT查询的其他列

时间:2014-01-29 21:48:32

标签: sql count distinct

我有一个包含以下列的表:Netting_Pool,Counterparty和Account。我的目标是运行SQL查询以显示何时存在具有多于1个Counterparty的Netting_Pool,并显示链接到这些Counterparties的Accounts。

一个例子:

Netting_Pool   Counterparty   Account  

        1   -----  A -----   ASD
        1   -----  A -----   XYZ
        1   -----  B -----   DEF
        2   -----  C -----   YUI
        3   -----  D -----   TRE
        4   -----  E -----   DDW
        5   -----  F -----   QWE

我希望查询具有以下返回值:

        1   -----  A   -----  ASD
        1   -----  A   -----  XYZ
        1   -----  B   -----  DEF

到目前为止,我最接近的是:

SELECT netting_pool, count (distinct counterparty)  
FROM Table  
GROUP BY netting_pool  
HAVING count(distinct counterparty) > 1' 

返回:

Netting_Pool, Count (distinct Counterparty)  

1             2

我无法将Counterparty或Account值合并到我的查询中并让它产生我想要的结果。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您的查询正在汇总,因此您只会获得一行。另一种方法是使用窗口/分析函数,大多数但不是所有数据库都支持这些函数。

不幸的是,count(distinct)通常不支持作为窗口函数。但是你可以通过查看最大值和最小值来解决这个问题:

select Netting_Pool, Counterparty, Account
from (select t.*,
             min(account) over (partition by Netting_Pool) as mina,
             max(account) over (partition by Netting_Pool) as maxa
      from table t
     ) t
where mina <> maxa;