首页 > 解决方案 > 尝试添加一个为每个用户 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

标签: sql

解决方案


您可以使用窗口函数。您没有指定要使用的确切逻辑,但以下内容应该可以满足您的需求,或者可以根据您的特定需求轻松修改:

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

推荐阅读