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

PostgreSQL中查询表内前3个最大数量(含并列)的问题排查

正确实现方案分析

你的原SQL语句问题出在排序逻辑和取数逻辑不匹配:你按name、quantity DESC排序后取前3行(含并列),这里的“前3行”是指排序后的前3条记录,而非前3个最大的quantity数值对应的所有行,所以只会返回两个500和一个400,不符合预期。

下面是两种正确的实现方式:

方法一:使用窗口函数DENSE_RANK()

利用DENSE_RANK()对quantity降序排名,相同数值会获得相同排名且排名连续,直接筛选排名≤3的行即可:

SELECT name, quantity
FROM (
    SELECT 
        name, 
        quantity,
        DENSE_RANK() OVER (ORDER BY quantity DESC) AS rnk
    FROM employee
) t
WHERE rnk <= 3
ORDER BY quantity DESC, name;

这个方法逻辑直观,能准确匹配需求,是这类场景的常用方案。

方法二:先获取前3大的distinct quantity值再关联

先提取出前3个最大的不重复quantity值,再关联原表筛选对应行:

SELECT e.name, e.quantity
FROM employee e
JOIN (
    SELECT DISTINCT quantity
    FROM employee
    ORDER BY quantity DESC
    FETCH FIRST 3 ROWS WITH TIES
) q ON e.quantity = q.quantity
ORDER BY e.quantity DESC, e.name;

这种方式先锁定目标数值范围,再匹配原数据,逻辑同样清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:06:30