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

SQL使用GROUP BY结合MIN/MAX聚合时如何保留其余关联列数据

GROUP BY关联非聚合字段获取最低销售额对应行的实现方案

以下提供两种常用实现方式,可根据你使用的数据库版本选择:

方案一:窗口函数实现(兼容MySQL8.0+、PostgreSQL、SQL Server、Oracle等主流数据库)

  • 实现逻辑:使用ROW_NUMBER()窗口函数按人员ID、NAME分区,按销售额升序排序,每个分区内排序第一的记录即为最低销售额对应的记录,直接筛选即可。
SELECT ID, NAME, REGION, SALES, QTR
FROM (
    SELECT 
        ID, NAME, REGION, SALES, QTR,
        -- 按人员分组,销售额从小到大排序
        ROW_NUMBER() OVER (PARTITION BY ID, NAME ORDER BY SALES ASC) AS rn
    FROM 你的表名 -- 替换为实际业务表名
) t
WHERE rn = 1;

如果同一个人员存在多条相同最低销售额的记录,需要全部返回的话,把ROW_NUMBER()替换为RANK()即可。

方案二:自连接实现(兼容低版本数据库如MySQL5.x)

  • 实现逻辑:先通过子查询得到每个人员的最低销售额,再和原表关联,匹配人员ID、NAME和销售额等于最低销售额的记录,即可拿到对应的REGION、QTR信息。
SELECT t1.ID, t1.NAME, t1.REGION, t1.SALES, t1.QTR
FROM 你的表名 t1 -- 替换为实际业务表名
INNER JOIN (
    -- 先查询每个人员的最低销售额
    SELECT ID, NAME, MIN(SALES) AS min_sales
    FROM 你的表名 -- 替换为实际业务表名
    GROUP BY ID, NAME
) t2 ON t1.ID = t2.ID AND t1.NAME = t2.NAME AND t1.SALES = t2.min_sales;

注意:如果同一个人员有多条相同最低销售额的记录,该查询会返回所有匹配行,若仅需返回任意一条,可根据业务需求额外加排序和筛选条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:02