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

SQL不使用MAX()函数如何按标识符分组取每组COLUMN_B最大的记录

禁用MAX函数时按Column_A分组取Column_B最大值的实现方案

方案1:自左连接反查法(兼容性最好,支持绝大多数SQL数据库)

SELECT t1.COLUMN_A, t1.COLUMN_B
FROM your_table t1
LEFT JOIN your_table t2 
  ON t1.COLUMN_A = t2.COLUMN_A 
  AND t1.COLUMN_B < t2.COLUMN_B
WHERE t2.COLUMN_A IS NULL;

逻辑说明:将表和自身做关联,关联条件是同Column_A分组下,t2的Column_B值大于t1的Column_B值。如果某条t1记录没有匹配到对应的t2记录,说明该分组下没有比当前t1.Column_B更大的值,这条就是分组内的最大值记录。

方案2:窗口函数法(支持窗口函数的数据库可使用,逻辑更清晰)

SELECT COLUMN_A, COLUMN_B
FROM (
  SELECT 
    COLUMN_A, 
    COLUMN_B,
    ROW_NUMBER() OVER (PARTITION BY COLUMN_A ORDER BY COLUMN_B DESC) AS rn
  FROM your_table
) t
WHERE rn = 1;

逻辑说明:用ROW_NUMBER窗口函数对同一Column_A分组的记录按Column_B降序排序,排序后序号为1的就是分组内Column_B最大的记录。如果需要保留同分组内并列最大值的所有记录,把ROW_NUMBER替换为RANK即可。

方案3:ALL运算符法

SELECT COLUMN_A, COLUMN_B
FROM your_table t1
WHERE COLUMN_B >= ALL (
  SELECT COLUMN_B 
  FROM your_table t2 
  WHERE t2.COLUMN_A = t1.COLUMN_A
);

逻辑说明:筛选出满足「当前Column_B大于等于同Column_A分组下所有Column_B值」的记录,即为分组最大值记录。

注意事项

  1. 以上代码中的your_table请替换为你实际使用的表名。
  2. 如果同一Column_A分组下存在多条Column_B同为最大值的记录,方案1和方案3会返回所有符合条件的记录,可根据实际需求增加去重逻辑调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:09:03