我可以在一个查询中选择2列上的distinct和按1列分组的sum吗?

cxfofazt  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(448)

是否可以编写一个查询,将表中的2列分组,以获得成员总数,再加上该表中一列的总和,但按一列分组?
例如,数据如下所示

我想得到“ohid”和“memid”列的不同组合的计数,并得到按ohid分组的“amount”列的总和。结果应该是这样的

我能够得到正确的计数使用下面的查询

SELECT count(*) as TotCount
from (Select DISTINCT OHID, MemID
      from #temp) AS TotMembers

但是,当我尝试使用下面的查询来获得所有结果时,我得到的结果是15个和一个完全不同的总和。

SELECT t.OHID,
       count(TotMembers.MemID) as TotCount,
       sum(t.Amount) as TotalAmount
from (Select DISTINCT OHID, MemID
      from #temp) AS TotMembers
join #temp t on t.OHID =  TotMembers .OHID
GROUP by t.OHID
pkbketx9

pkbketx91#

如果我理解正确,你要考虑 NULL 作为有效值。剩下的只是聚合:

select t.ohid,
       (count(distinct t.memid) +
        (case when count(*) <> count(t.memid) then 1 else 0 end)
       ) as num_memid,
       sum(t.amount) as total_amount
from #temp t
group by t.ohid,

这个 case 逻辑可能有点令人讨厌。只是在增加 1 如果有任何值 NULL .
通过两个级别的聚合,您可能会发现这一点更容易实现:

select t.ohid, count(*), sum(amount)
from (select t.ohid, t.memid, sum(t.amount) as amount
      from #temp t
      group by t.ohid, t.memid
     ) t
group by t.ohid

相关问题