我最近开始使用T-SQL,并且遇到了按功能分组的问题。
假设我有一个包含3列的表:Column_1,Column_2和Column_3。我知道,对于给定的Column_1值,Column_2将始终具有给定的值。另一方面,Column_3独立于Column_1。
所以表可能看起来像这样:
Column_1 Column_2 Column_3
1 42 57
1 42 35
2 3 5
2 3 6
5 78 45
我想对Column_1进行分组,以汇总Column_3(比方说一个sum())。但是,当我进行分组时,即使我知道没有必要,也必须对Column_2进行分组或汇总。
所以我的SQL请求将是:
select Column_1,Column_2,sum(Column_3)
from Table
group by Column_1,Column_2
或
select Column_1,max(Column_2),sum(Column_3)
from Table
group by Column_1
(using max as a workaround to avoid grouping by Column_2)
我的问题是:有没有办法告诉SQL Column_2不需要聚合函数,并让SQL检查假设是否正确?
我认为这是一个最佳选择,因为它可以确保我的假设正确。当使用前两个请求时,我永远不会100%确认是这种情况(除非在请求之前以其他方式检查它),并且可能会导致难以识别的错误(尤其是在使用最大解决方法时)。
理想情况下,我希望能够编写如下内容:
select Column_1,no_agg_necessary(Column_2),sum(Column_3)
from Table
group by Column_1
如果按给定的Column_1值分组时Column_2的值不相同,则会出现警告。
我当时在想选择Column_2可以满足我的需求:
case when count(distinct Column_2) = 1 then max(Column_2) else raiseerror() end as Column_2
但是在这样的上下文中似乎不可能使用raiseerror(),并且添加distinct会减慢请求的速度。
您是否知道可以满足我需求的任何SQL功能?