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

SQL如何实现合并排名前2行之后的所有行并汇总数据

汽车销量排名合并后N行的SQL实现

场景说明

现有汽车销量排名表,需要按排名规则保留前2名的品牌明细,排名第3及以后的所有品牌合并为「others」,汇总其总销量。
假设原始表名为car_sales,字段定义如下:

  • car:汽车品牌名称
  • sum_of_solds:品牌累计销量
  • rank:品牌销量排名(数值越小排名越靠前)

实现SQL

用UNION ALL拼接两部分结果即可,第一部分取前2名明细,第二部分汇总其余品牌数据,最后统一排序保证结果顺序正确:

SELECT car, sum_of_solds, rank
FROM (
    -- 取排名前2的品牌明细
    SELECT car, sum_of_solds, rank
    FROM car_sales
    WHERE rank <= 2

    UNION ALL

    -- 汇总排名3名及以后的品牌销量
    SELECT 
        'others' AS car,
        SUM(sum_of_solds) AS sum_of_solds,
        'others' AS rank
    FROM car_sales
    WHERE rank > 2
) t
-- 排序保证前两名按排名顺序展示,others固定在最后
ORDER BY CASE WHEN rank = 'others' THEN 999 ELSE CAST(rank AS SIGNED) END ASC;

补充说明

你给出的期望输出示例里前两名的销量数值存在笔误,按原始表数据,排名1的tesla销量应为180000、排名2的honda销量应为150000,剩余mazda、toyota销量合计为180000,上述SQL执行后会返回符合逻辑的正确结果。

如果你的表中没有提前计算好rank字段,可以先通过窗口函数在子查询里根据销量计算排名,再套用上述合并逻辑即可,示例排名计算逻辑:RANK() OVER(ORDER BY sum_of_solds DESC) AS rank

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:30:53