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

SQL如何基于分组列筛选另一列最大值对应的关联行记录?

SQL分组取组内最大值对应行的可行方案

你需要实现的是按Name字段分组,提取每组中Contracts字段值最高的对应完整记录,以下是两种不同场景下的可直接复用方案:

方案1:窗口函数写法(适配MySQL8.0+、PostgreSQL、Oracle、SQL Server等所有支持窗口函数的新版数据库)

这是目前最推荐的实现方式,逻辑清晰且执行效率高:

WITH ranked_records AS (
    SELECT
        Name,
        Account,
        Contracts,
        -- 按Name分组后对Contracts倒序排序,每组的第一条就是最大值对应记录
        ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Contracts DESC) AS group_rank
    FROM 替换为你的实际表名
)
SELECT Name, Account, Contracts
FROM ranked_records
WHERE group_rank = 1;

如果同一个Name下存在多条Contracts值相同的最高记录,需要全部返回时,把ROW_NUMBER()替换为RANK()即可。

方案2:子查询关联写法(适配MySQL5.x等不支持窗口函数的老旧版本数据库)

SELECT t1.Name, t1.Account, t1.Contracts
FROM 替换为你的实际表名 t1
INNER JOIN (
    -- 先查询每个Name对应的最大Contracts值
    SELECT Name, MAX(Contracts) AS max_contract
    FROM 替换为你的实际表名
    GROUP BY Name
) t2 ON t1.Name = t2.Name AND t1.Contracts = t2.max_contract;

失效原因说明

  • GREATEST()函数的作用是返回同一行中多个输入参数的最大值,无法实现分组后不同行之间的最大值筛选,不符合你的使用场景
  • DISTINCT的作用是对查询返回的整行结果去重,没有分组筛选最大值的能力,因此也无法满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:36:03