You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排行榜表中前一行total_of_won_and_looking_good值对比查询需求

实现用户排行榜的对比与验证方案

先把你的需求拆解成几个核心落地步骤,这样更容易理解和实现:

  1. 计算每个用户的total_of_won_and_looking_good总和(统计pick status为1或2的次数,用户最多4次pick)
  2. 按规则生成排行榜(总和降序,相同则按points_player排序)
  3. 对比每行与前一行的total_of_won_and_looking_good值,同时验证每行的pick status是否高于前一行

下面以支持窗口函数的SQL(比如MySQL 8+、PostgreSQL、SQL Server)为例,给出具体实现方案:

第一步:用户核心指标汇总

先从原始的pick记录表中,汇总每个用户的关键数据:

WITH user_summary AS (
    SELECT
        user_id,
        -- 统计pick status为1或2的次数,作为总和
        SUM(CASE WHEN pick_status IN (1, 2) THEN 1 ELSE 0 END) AS total_of_won_and_looking_good,
        points_player,
        -- 获取用户的最高pick status(用来验证"每行pick status高于前一行"的要求)
        MAX(pick_status) AS highest_pick_status
    FROM user_picks
    GROUP BY user_id, points_player
)

第二步:生成排行榜并添加行对比数据

基于汇总表生成排序后的排行榜,用LAG()窗口函数获取前一行的对比数据,同时添加验证字段:

SELECT
    user_id,
    total_of_won_and_looking_good,
    points_player,
    highest_pick_status,
    -- 获取前一行的总和值
    LAG(total_of_won_and_looking_good) OVER (ORDER BY total_of_won_and_looking_good DESC, points_player DESC) AS prev_total,
    -- 获取前一行的最高pick status
    LAG(highest_pick_status) OVER (ORDER BY total_of_won_and_looking_good DESC, points_player DESC) AS prev_highest_pick_status,
    -- 验证当前行pick status是否高于前一行
    CASE
        WHEN LAG(highest_pick_status) OVER (ORDER BY total_of_won_and_looking_good DESC, points_player DESC) IS NULL THEN '第一行,无需验证'
        WHEN highest_pick_status > LAG(highest_pick_status) OVER (ORDER BY total_of_won_and_looking_good DESC, points_player DESC) THEN '符合要求'
        ELSE '不符合:当前pick status未高于前一行'
    END AS pick_status_validation,
    -- 直观展示当前行与前一行的总和差值
    total_of_won_and_looking_good - LAG(total_of_won_and_looking_good) OVER (ORDER BY total_of_won_and_looking_good DESC, points_player DESC) AS total_diff_from_prev
FROM user_summary
ORDER BY total_of_won_and_looking_good DESC, points_player DESC;

关键细节说明:

  • LAG()函数是实现行与行对比的核心,能直接获取排序后前一行的对应字段值
  • 排序规则严格遵循你的要求:优先按total_of_won_and_looking_good降序,总和相同时按points_player降序(如果需要升序,把DESC改成ASC即可)
  • pick_status_validation字段会自动标注当前行是否符合"pick status高于前一行"的要求,方便快速排查问题
  • total_diff_from_prev字段直观展示总和的变化,满足你"核心对比total值"的需求

如果你的"pick status高于前一行"指的是用户单条pick记录(而非用户的最高状态),可以补充说明你的数据结构,我再调整适配方案。

内容的提问来源于stack exchange,提问作者user9686029

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:07:34