我可以在一个查询中 Select 2 列上的 DISTINCT 和按 1 列分组的 Sum 吗?
Can I Select DISTINCT on 2 columns and Sum grouped by 1 column in one query?
是否可以编写一个查询,我将在 table 中按 2 列分组以获得成员总数加上同一 table 中一列的总和,但按一列分组?
比如数据是这样的
我想计算“OHID”和“MemID”列的不同组合,并获得按 OHID 分组的“金额”列的总和。结果应该是这样的
我能够使用下面的查询得到正确的计数
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
如果我没理解错的话,你想将 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
逻辑可能有点令人反感。如果任何值为 NULL
.
,它只是添加 1
您可能会发现这更容易通过两个级别的聚合来遵循:
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
是否可以编写一个查询,我将在 table 中按 2 列分组以获得成员总数加上同一 table 中一列的总和,但按一列分组?
比如数据是这样的
我想计算“OHID”和“MemID”列的不同组合,并获得按 OHID 分组的“金额”列的总和。结果应该是这样的
我能够使用下面的查询得到正确的计数
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
如果我没理解错的话,你想将 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
逻辑可能有点令人反感。如果任何值为 NULL
.
1
您可能会发现这更容易通过两个级别的聚合来遵循:
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