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

如何用SQL返回各部门最大值对应的行,包含同值多行?

解决每个部门保留Value最大值所有行的SQL问题

你的原SQL语句通过GROUP BY分组后,仅能返回每组的聚合结果,无法保留所有符合条件的原始行——尤其是当同一部门存在多条Value等于最大值的记录时,会丢失这些数据。以下提供两种可行的解决方案:

方案一:使用窗口函数(推荐,适配多数现代数据库)

利用RANK()窗口函数对每个部门的记录按Value降序排名,筛选出排名为1的所有行(所有Value等于最大值的记录都会被标记为排名1)。

SELECT Name, Code, Date, Value
FROM (
    SELECT 
        Name,
        Code,
        Date,
        Value,
        -- 按部门(Name+Code)分组,按Value降序排名
        RANK() OVER (PARTITION BY Name, Code ORDER BY Value DESC) AS rank_num
    FROM Department
) ranked_data
WHERE rank_num = 1;

如果你的数据库支持DENSE_RANK(),也可以替换RANK(),效果在这个场景下一致。

方案二:子查询关联法(兼容旧版数据库)

先通过子查询计算每个部门的最大Value,再将原表与该子查询关联,筛选出Value等于对应部门最大值的所有行。

SELECT d.Name, d.Code, d.Date, d.Value
FROM Department d
INNER JOIN (
    -- 计算每个部门的最大Value
    SELECT Name, Code, MAX(Value) AS max_value
    FROM Department
    GROUP BY Name, Code
) dept_max ON d.Name = dept_max.Name 
           AND d.Code = dept_max.Code 
           AND d.Value = dept_max.max_value;

原SQL问题说明

原SQL中GROUP BY Name, Code后,MAX(Date)仅取该部门的最新日期,MAX(Value)取该部门的最大Value,但这两个聚合值可能来自不同的原始行,且无法保留多个Value等于最大值的记录,因此无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:06:48