gpt4 book ai didi

sql - 分组依据汇总和计数(不同)

转载 作者:行者123 更新时间:2023-12-05 01:21:04 27 4
gpt4 key购买 nike

在获取 DistinctCount 时,我在使用 Group By With Rollup 时遇到了一个小问题。

问题是 Rollup 摘要只是所有分组中 Distinct 值的总数,而不是所有分组的摘要。

这里有一个测试场景来说明我的意思:

Create Table #Test
(
GroupId Int Not Null,
Value Int Not Null
)

Insert #Test (GroupId, Value)
Values (1, 1),(1, 2),(1, 3),(1, 4),(1, 5),(1, 5),(1, 1),
(2, 1),(2, 6),(2, 7),(2, 5),(2, 7),(2, 5),
(3, 9),(3, 10),(3, 11),(3, 4),(3, 5),(3, 7),(3, 8),(3, 5),(3, 7),(3, 8)

对于这个特定的表,如果我运行这个查询:

Select  Case When Grouping(GroupId) = 1 Then 'Total:' Else Str(GroupId) End As GroupId, 
Count(Distinct Value) Count
From #Test
Group By GroupId With Rollup
Order By Grouping(GroupId), GroupId

我得到以下结果:

GroupId Count
-------------
1 5
2 4
3 7
Total: 11

我对“总计”行的预期结果是 16,但我只得到 11——这是所有组中 Distinct 值的总数。

从查询中删除 Distinct 确实显示了该 Rollup 的预期结果:

Select  Case When Grouping(GroupId) = 1 Then 'Total:' Else Str(GroupId) End As GroupId, 
Count(Value) Count
From #Test
Group By GroupId With Rollup
Order By Grouping(GroupId), GroupId

产生这些结果:

GroupId Count
-------------
1 7
2 6
3 10
Total: 23

按预期总结了组。

我的问题是:对于 Count Distinct 上的 Rollup 这是否正常?是否有一些其他类似 Rollup 的选项可用于 Grouping 以显示 16 而不是上面示例中的 11?

最佳答案

你可以通过嵌套查询和使用技巧来获得你想要的:

select (Case When Grouping(GroupId) = 1 Then 'Total:' Else Str(GroupId) End) as GroupId, 
Sum(Count) as Count
from (Select GroupId,
Count(Distinct Value) as Count
From #Test
Group By GroupId
) t
Group By GroupId With Rollup
Order By Grouping(GroupId), GroupId;

第二个 group by 在逻辑上不进行聚合,因为每个组只有一行。它只是为了在 rollup 中获取您想要的值。

关于sql - 分组依据汇总和计数(不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com