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

如何编写SQL查询采购总量排名第二的国家

现有SQL的问题

  1. 未按国家维度聚合采购总量,直接按单条订单明细的采购量排序,输出结果不是国家维度的采购总量排名
  2. 仅通过limit 2返回前2条结果,无法单独筛选出排名第二的国家

基础实现方案(无并列排名场景)

适用于不存在多个国家采购总量相同的场景,改动后代码如下:

SELECT c.country 
FROM Customers c 
JOIN Orders o ON c.customerid = o.customerid 
JOIN OrderDetails od ON o.orderid = od.orderid 
GROUP BY c.country
ORDER BY SUM(od.quantity) DESC
LIMIT 1 OFFSET 1

改动说明:

  • 新增GROUP BY c.country按国家分组,用SUM(od.quantity)统计每个国家的总采购量
  • 排序逻辑调整为按汇总后的总采购量倒序排列
  • 用LIMIT 1 OFFSET 1跳过排名第一的结果,仅返回排名第二的1条数据

进阶实现方案(支持并列排名场景)

如果需要处理多个国家采购总量相同、并列排名的情况,使用DENSE_RANK窗口函数实现更准确的排名匹配:

WITH country_purchase AS (
    SELECT 
        c.country,
        SUM(od.quantity) total_quantity,
        DENSE_RANK() OVER(ORDER BY SUM(od.quantity) DESC) AS purchase_rank
    FROM Customers c 
    JOIN Orders o ON c.customerid = o.customerid 
    JOIN OrderDetails od ON o.orderid = od.orderid 
    GROUP BY c.country
)
SELECT country FROM country_purchase WHERE purchase_rank = 2

该方案的优势是如果存在多个国家并列采购量第一,DENSE_RANK会把下一个采购量级的国家正确标记为第2名,不会出现排名跳空的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:51:03