sql - 尝试添加一个为每个用户 ID 分配一个象限的列
问题描述
这是我现在的
我正在尝试添加一个列,该列根据该Day相对于所有其他用户的 Progress 将每个用户 ID 分配给 Quadrant 。(第 25、50、75、90 和 99 个百分位数)
例如,我想
这是当前的查询,虽然我不确定它会有多大帮助,因为它包含一些连接
SELECT Day, user_id, progress, Revenue, users
FROM Unlock_Progress
INNER JOIN Daily_Revenue USING(user_id, DAY)
LEFT JOIN DAU USING (Day)
ORDER BY Day, user_id
解决方案
您可以使用窗口函数。您没有指定要使用的确切逻辑,但以下内容应该可以满足您的需求,或者可以根据您的特定需求轻松修改:
SELECT udd.*,
(CASE WHEN seqnum < 0.25 * cnt THEN 0
WHEN seqnum < 0.50 * cnt THEN 25
WHEN seqnum < 0.75 * cnt THEN 50
WHEN seqnum < 0.99 * cnt THEN 75
ELSE 99
END) as percentile_group
FROM (SELECT Day, user_id, progress, Revenue, users,
RANK() OVER (PARTITION BY Day ORDER BY Revenue) as seqnum,
COUNT(*) OVER (PARTITION BY Day) as cnt
FROM Unlock_Progress u JOIN
Daily_Revenue dr
USING (user_id, DAY) LEFT JOIN
DAU
USING (Day)
) udd
ORDER BY Day, user_id
推荐阅读
- bigdata - vespa.ai 中是否有任何方法可以让我使用打乱的查询字符串进行查询?
- javascript - Javascript 错误处理什么也没捕获
- excel - VBA:将表格从 Excel 发送到 Outlook
- api - 从我的本地主机获得 404 响应
- spring - 如何解决 Spring Boot 中解析 YAML 配置的错误?
- jquery - How to get child element in each loop if already bind 'this' to class in JQuery?
- dovecot - Dovecot 组件,处理其进程之间的连接和传递数据
- scala - NoSuchMethodError:com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.findFormatOverrides 上 Databricks
- ios - 如何使 UICollectionView 在 App Store 等集合视图单元格内设置动画?
- python - 我将如何制作一个机器人来计算有多少人的名字在语音频道中以“5”开头(discord.py)