按特定顺序对列值求和



我想知道是否可以按升序对float(53)列的值求和。

例如,如果我的列包含值5、7和2。我希望它被计算为2+5+7。

在我的情况下,这个顺序很重要,因为我要对数百万个浮点进行求和,每次执行都会得到不同的结果。

I认为您可以使用窗口函数和过滤来获得总和:

select t.*
from (select t.*,
sum(col) over (order by col asc) as sum_col,
row_number() over (order by col desc) as seqnum
from t
) t
where seqnum = 1;

或者不带子查询:

select top (1) sum(col) over (order by col asc)
from t
order by col desc;

注意:这假设col具有唯一的值。如果可能重复,只需将主键添加为order bys中的第二列即可。

然而,如果可以使用numeric/decimal存储数据,这可能是一个更可持续的解决方案。

最新更新