sql - 1 天、2 天和 3 天根据每日同类用户获得的奖牌总和
问题描述
我需要一些群组分析方面的帮助。
我有:
用户
user_id installed_at 111 01.03.2020 112 01.03.2020 119 02.03.2020 120 02.03.2020
获得奖牌表
user_id created_at earned_medals 111 01.03.2020 1 112 01.03.2020 1 111 02.03.2020 2 112 02.03.2020 2 119 02.03.2020 1 120 02.03.2020 1 111 03.03.2020 3 112 03.03.2020 3 119 03.03.2020 2 120 03.03.2020 2
我需要累积获得的奖牌
Daily_cohort-user 1-day 2-day 3-day
01.03.2020 2 6 12
02.03.2020 2 6 null
解决方案
试试这个方法:
with cte as (
select
t2.installed_at, t1.user_id,created_at,
sum(t1.earned_medals) over (partition by t1.user_id order by t1.user_id,created_at) as "sum_"
from earned_medals t1 inner join users t2 on t1.user_id=t2.user_id
)
select
installed_at,
sum(sum_) filter (where created_at-installed_at =0 ) as "Day1",
sum(sum_) filter (where created_at-installed_at =1 ) as "Day2",
sum(sum_) filter (where created_at-installed_at =2 ) as "Day3"
from cte
group by 1
order by 1
您可以根据需要在查询中添加更多天数,如下所示
sum(sum_) filter (where created_at-installed_at =3 ) as "Day4",
sum(sum_) filter (where created_at-installed_at =4 ) as "Day5",
...
...
...
推荐阅读
- c++ - 读取 mifare 卡块并将其块的一部分与一些文本进行比较
- java - 删除 ListView 项目 - Android
- python - Keras LSTM input_shape 的问题:预期 lstm_1_input 的形状为 (500, 2) 但得到的数组的形状为 (500, 5)
- java - 如何在JComboBox中显示信息,但后台操作选择不同的信息
- visual-studio-code - 打开文件时打开 Web 视图
- java - 从 Camel 连接到 JBoss EAP6 上的队列
- php - 为什么这不保存到数据库?
- r - 创建一个仅显示获胜团队的新列
- javascript - 带有 requestAnimationFrame() 的画布动画
- xml - 如何访问在不同视图中定义的片段?