运行 按组对 case 语句求和
running sum with case statements by group
我想计算 运行 总和,但我的代码不起作用,请问为什么?
select id, color, time, (sum(case when question = 1 then 1 else 0 end) OVER (PARTITION BY id ORDER BY time rows) +
sum(case when suggestion='True' then 1 else 0 end) OVER (PARTITION BY id ORDER BY time) +
sum(case when proposal= 'True' then 1 else 0 end) OVER (PARTITION BY id ORDER BY time)) as s
from table
这是样本数据
id color time question suggestion proposal
1 pink 14:00 0 True False
1 red 15:00 0 False False
1 blue 13:00 0 False False
2 green 11:00 0 True False
2 orange 15:00 1 False False
结果:
id color time s
1 pink 14:00 1
1 red 15:00 1
1 blue 13:00 0
2 green 11:00 1
2 orange 15:00 2
如果将所有布尔表达式都转换为整数,则只需使用 SUM()
window 函数一次:
SELECT id, color, time,
SUM((question = 1)::int + suggestion::int + proposal::int) OVER (PARTITION BY id ORDER BY time) s
FROM tablename
ORDER BY id, time;
参见demo。
我想计算 运行 总和,但我的代码不起作用,请问为什么?
select id, color, time, (sum(case when question = 1 then 1 else 0 end) OVER (PARTITION BY id ORDER BY time rows) +
sum(case when suggestion='True' then 1 else 0 end) OVER (PARTITION BY id ORDER BY time) +
sum(case when proposal= 'True' then 1 else 0 end) OVER (PARTITION BY id ORDER BY time)) as s
from table
这是样本数据
id color time question suggestion proposal
1 pink 14:00 0 True False
1 red 15:00 0 False False
1 blue 13:00 0 False False
2 green 11:00 0 True False
2 orange 15:00 1 False False
结果:
id color time s
1 pink 14:00 1
1 red 15:00 1
1 blue 13:00 0
2 green 11:00 1
2 orange 15:00 2
如果将所有布尔表达式都转换为整数,则只需使用 SUM()
window 函数一次:
SELECT id, color, time,
SUM((question = 1)::int + suggestion::int + proposal::int) OVER (PARTITION BY id ORDER BY time) s
FROM tablename
ORDER BY id, time;
参见demo。