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

如何获取各分组集中Term列最大值对应的行?

获取分组内Term最大值对应的所有行

问题描述

现有如下结构的表格:

Module_NameTermsynopsis
Ali2001case1
Ali2002case2
Ali2002case3
Nami2101Opt1
Nami2101Opt2
Nami2102opt3

需要按Module_Name分组,提取每个分组中Term列值最大的所有行,期望结果:

Module_NameTermsynopsis
Ali2002case2
Ali2002case3
Nami2102opt3

解决方案

方法1:子查询关联(通用SQL,适配多数数据库)

先通过子查询算出每个Module_Name对应的最大Term值,再将原表和这个子查询结果关联,筛选出符合条件的行:

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT Module_Name, MAX(Term) AS max_term
    FROM your_table
    GROUP BY Module_Name
) m ON t.Module_Name = m.Module_Name AND t.Term = m.max_term;

方法2:窗口函数(支持窗口函数的数据库,如MySQL 8+/PostgreSQL/SQL Server等)

使用RANK()窗口函数,为每个分组内的行按Term降序排序,标记出Term最大的行,再筛选标记为1的行:

SELECT Module_Name, Term, synopsis
FROM (
    SELECT 
        *,
        RANK() OVER (PARTITION BY Module_Name ORDER BY Term DESC) AS rnk
    FROM your_table
) t
WHERE rnk = 1;

如果分组内有多个相同的最大Term值,RANK()会给它们都标记为1,正好匹配需求;若使用ROW_NUMBER()会给每行分配唯一序号,可能只取到其中一行,因此这里RANK()更合适。

方法3:MAX()窗口函数(直观写法)

直接在每行计算当前分组的最大Term,再筛选行的Term等于该最大值:

SELECT Module_Name, Term, synopsis
FROM (
    SELECT 
        *,
        MAX(Term) OVER (PARTITION BY Module_Name) AS max_term
    FROM your_table
) t
WHERE Term = max_term;

这种写法无需排序,逻辑更直观,部分场景下性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:54:16