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

SQL实现同公会相邻赛季grank百分比差值计算

实现方案

直接用窗口函数LAG()就能快速实现同公会跨赛季取值,不需要写冗余的自连接逻辑,完整SQL如下:

WITH guild_season_stats AS (
    -- 原有公会赛季聚合统计逻辑,抽成公用表表达式方便后续计算
    SELECT 
        season,
        guildname,
        COUNT(guildname) AS mp_count, 
        (COUNT(guildname)/600::FLOAT)*100 AS grank
    FROM mp_rankings
    GROUP BY season, guildname
)
SELECT 
    season,
    guildname,
    mp_count,
    grank,
    -- 计算当前赛季和上赛季的grank差值,保留两位小数后拼接百分号
    ROUND(grank - LAG(grank) OVER (PARTITION BY guildname ORDER BY season), 2) || '%' AS prev_season_percent_diff
FROM guild_season_stats
-- 自动过滤出最新赛季的数据,不需要硬编码赛季值
WHERE season = (SELECT MAX(season) FROM mp_rankings)
ORDER BY grank DESC;

逻辑说明

  • LAG() OVER (PARTITION BY guildname ORDER BY season):将聚合后的数据按公会名分组,每组内按赛季升序排列,取当前行的上一行(即对应公会的上一赛季)的grank值,完全匹配相邻赛季差值的计算规则
  • 差值计算后用ROUND()保留2位小数,拼接%即可匹配预期的百分比展示格式
  • 用子查询动态取最大赛季值,后续赛季更新时不需要手动修改筛选条件,代码可复用性更高
  • 若某公会在最新赛季首次出现、无历史赛季数据,prev_season_percent_diff会返回null,符合常规统计逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:36:18