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

求按客户名称汇总订单金额后提取Top5客户的SQL查询语句

按客户汇总订单金额并提取Top 5客户的SQL解决方案

嘿,我来帮你搞定这个需求!要实现按客户名称汇总所有订单金额,再选出总金额最高的前5位客户,咱们可以根据你使用的数据库类型,选择对应的SQL语句,我把几种常见情况都列出来,还有细节说明:

基础版本(适用于大多数数据库)

MySQL/MariaDB/PostgreSQL

SELECT client, SUM(price) AS total_amount
FROM your_table_name  -- 记得把这里换成你的实际表名哦
GROUP BY client
ORDER BY total_amount DESC
LIMIT 5;

SQL Server

SELECT TOP 5 client, SUM(price) AS total_amount
FROM your_table_name
GROUP BY client
ORDER BY total_amount DESC;

Oracle(12c及以上版本)

SELECT client, SUM(price) AS total_amount
FROM your_table_name
GROUP BY client
ORDER BY total_amount DESC
FETCH FIRST 5 ROWS ONLY;

包含并列排名的版本(如果需要保留并列第5的客户)

如果存在多个客户总金额相同且都排第5的情况,上面的基础版本只会返回其中一部分,要是想把这些并列的客户都包含进来,可以用窗口函数实现,这个写法在现代数据库里基本都支持:

SELECT client, total_amount
FROM (
    SELECT 
        client, 
        SUM(price) AS total_amount,
        RANK() OVER (ORDER BY SUM(price) DESC) AS customer_rank
    FROM your_table_name
    GROUP BY client
) ranked_customers
WHERE customer_rank <= 5;

关键部分解释

  • SUM(price) AS total_amount:计算每个客户的所有订单金额总和,用AS给这个总和起个直观的别名,方便后续排序和查看。
  • GROUP BY client:按照客户名称分组,确保每个客户只生成一行汇总数据,不会重复计算。
  • ORDER BY total_amount DESC:把汇总结果按总金额从高到低排序,这样金额最高的客户会排在最前面。
  • 取前5的语法:不同数据库用不同关键字(LIMIT/TOP/FETCH FIRST...ONLY),核心都是限制返回结果的行数;窗口函数版本里的RANK()会给相同金额的客户分配相同排名,这样就能保留并列的客户啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:37:08