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

SQL实现需求:按column2、column3分组,获取符合条件的column4最大值行

复杂分组筛选SQL实现

需求说明

对数据按以下规则筛选:

  • 以column2和column3为一级分组
  • 每个一级分组内,再按column4划分子组:
    • 在每个column4子组中,先取column5值最大的行;如果该行的column1为0,则排除所有column1=0的行后,取剩余行里column5最大的那一行
  • 从每个一级分组下各column4子组筛选出的行中,最终选取column4值最大的那一行

示例数据

column1    column2     column3     column4     column5
12          1          A1          1           1
0           1          A1          1           2
18          1          A1          1           3
20          1          A1          2           1
23          1          A1          2           2
4           1          B1          1           1
7           1          B1          1           2
12          1          B1          1           3
17          1          B1          2           1
0           1          B1          2           2
13          2          A1          1           1
25          2          A1          1           2
24          2          A1          1           3
25          2          A1          2           1
0           2          A1          2           2
13          2          B1          1           1
0           2          B1          1           2
24          2          B1          1           3
25          2          B1          2           1
0           2          B1          2           2
7           3          A1          1           1
10          3          A1          1           2
14          3          A1          1           3
15          3          A1          2           1
18          3          A1          2           2
7           3          B1          1           1
10          3          B1          1           2
14          3          B1          1           3
15          3          B1          2           1
18          3          B1          2           2

期望结果

column1    column2     column3     column4     column5
23          1          A1          2           2
17          1          B1          2           1
25          2          A1          2           1
25          2          B1          2           1
18          3          A1          2           2
18          3          B1          2           2

SQL实现

通过多层窗口函数分层处理,实现逻辑如下:

WITH step1 AS (
    -- 给每个column4子组的行排序:优先排除column1=0的行,再按column5降序
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY column2, column3, column4
            ORDER BY CASE WHEN column1 = 0 THEN 1 ELSE 0 END, column5 DESC
        ) AS rn
    FROM your_table_name
),
step2 AS (
    -- 提取每个column4子组中符合要求的行(rn=1即为目标行)
    SELECT *
    FROM step1
    WHERE rn = 1
),
step3 AS (
    -- 在column2+column3分组内,按column4降序排序,标记最终候选行
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY column2, column3
            ORDER BY column4 DESC
        ) AS final_rn
    FROM step2
)
-- 筛选出最终结果
SELECT column1, column2, column3, column4, column5
FROM step3
WHERE final_rn = 1
ORDER BY column2, column3;

逻辑拆解

  1. step1:针对column2+column3+column4的分组,先将column1=0的行排至末尾,再按column5从大到小排序,用ROW_NUMBER()标记顺序。rn=1的行就是该子组内符合要求的行(要么是最大column5且column1≠0,要么是排除0值行后最大的column5)。
  2. step2:提取每个column4子组中rn=1的行,得到各子组的筛选结果。
  3. step3:在column2+column3的分组内,按column4从大到小排序,标记顺序后取final_rn=1的行,即为最终需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:48