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

如何按行查找最大值的并列记录?附示例场景说明

如何找出各分组中与最大值并列的记录

这个需求我之前做销售数据分析时刚好碰到过——不仅要拿到每个地区的最高销售额,还要把所有并列第一的品牌都找出来对吧?我给你分享两种实用的SQL实现方式,都能精准得到你要的结果:

方法一:使用窗口函数(推荐,简洁高效)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server、Oracle这些),用DENSE_RANK()或者RANK()是最方便的。DENSE_RANK()会给相同最大值的记录分配相同的排名,而且不会跳过排名数字,完美适配并列场景。

假设你的表结构是这样的:

CREATE TABLE sales (
    region VARCHAR(50),
    brand VARCHAR(50),
    sales_amount INT
);

对应的查询SQL:

SELECT region, brand, sales_amount
FROM (
    SELECT 
        region, 
        brand, 
        sales_amount,
        DENSE_RANK() OVER (PARTITION BY region ORDER BY sales_amount DESC) AS rank_num
    FROM sales
) ranked_sales
WHERE rank_num = 1;

执行这个查询后,就能直接得到每个地区里销售额最高的所有品牌——比如miami地区的honda和ford,san francisco地区的toyota和chevy都会被筛选出来。

方法二:子查询+关联查询(兼容性更强)

如果你的数据库版本比较老,不支持窗口函数,那就用子查询先拿到每个地区的最大值,再和原表关联匹配:

SELECT s.region, s.brand, s.sales_amount
FROM sales s
JOIN (
    SELECT region, MAX(sales_amount) AS max_sales
    FROM sales
    GROUP BY region
) max_sales_per_region
ON s.region = max_sales_per_region.region 
AND s.sales_amount = max_sales_per_region.max_sales;

这个逻辑也很直观:先通过分组聚合得到每个地区的最高销售额,再把原表中销售额等于对应地区最大值的记录全部捞出来,同样能得到所有并列第一的品牌。

两种方法都能满足你的需求,窗口函数写法更简洁,子查询则适配更多老版本数据库,你可以根据自己的环境选~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:16:33