我是SQL的新手,无法解决以下问题:我有一列名称[name]),一列我想总结的整数值([Values])和一列整数值([天])。我想总结每天按名称分组的值。因此,例如,如果在第1天有一个名称为“ Chris”的值4,在第3天还有另一个条目“ Chris”的值2,我想显示第_1天(4)和第_2天(4)的Chris总和+ 2 = 6)。
就像上面的示例(“ chris”)一样,我想对它们进行汇总,显示每天每个名称的总和(从第1天到第x天的总和)。
我每天只能汇总每个名称的值(请参见下面的代码),但这不是我要搜索的内容,因为我需要保留数据库的结构。因此,我需要在另一列中显示每一行中每个值的总和。
replace
下面有一张表格显示我想要实现的目标。
答案 0 :(得分:0)
具有sum()
窗口功能:
select *,
sum(value) over (partition by name order by day) SumValue,
sum(value2) over (partition by name2 order by day) SumValue2
from tablename
order by day
或:
select name, day, value, name2, value2,
sum(value) over (partition by name order by day) SumValue,
sum(value2) over (partition by name2 order by day) SumValue2
from (select *, row_number() over (order by day) rn from tablename) as t
order by rn
如果要保留行的原始顺序。
请参见demo。
结果:
> name | day | value | name2 | value2 | SumValue | SumValue2
> :---- | --: | ----: | :---- | -----: | -------: | --------:
> Chris | 1 | 2 | Paul | 5 | 2 | 5
> Alice | 1 | 5 | Ken | 4 | 5 | 4
> Paul | 2 | 8 | Alice | 1 | 8 | 1
> Ken | 2 | 4 | Chris | 2 | 4 | 2
> Alice | 3 | 3 | Ken | 3 | 8 | 7
> Chris | 3 | 6 | Paul | 0 | 8 | 5