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

PostgreSQL如何查询指定时间段内订单总金额最高的企业CustAccount

需求说明

查询指定时间段内订单累计总金额最高的企业,返回对应企业的CustAccount字段,统计维度为时间段内所有订单的累计金额,而非单笔订单的最大金额。

原有SQL错误点
  • 子查询嵌套逻辑混乱,聚合函数SUM、MAX的使用位置不符合SQL语法规范
  • 分组逻辑错误,同时按CustAccount和Amount分组,无法统计单个企业的累计金额
  • 排序字段使用单笔订单金额Amount,而非累计金额,和需求不符
正确SQL实现

常规实现(仅返回1条最高记录)

适用于MySQL、PostgreSQL等支持LIMIT语法的数据库:

SELECT CustAccount
FROM (
    -- 先统计每个企业在指定时间段的累计订单金额
    SELECT 
        CustAccount,
        SUM(Amount) AS total_amount
    FROM CustTrans
    WHERE TransDate BETWEEN '2000-01-01' AND '2022-01-31'
    GROUP BY CustAccount
) AS cust_total
ORDER BY total_amount DESC
LIMIT 1;

提示:如果你的数据库日期存储格式为DD/MM/YYYY,可将WHERE子句中的日期字符串替换为原写法'01/01/2000'和'31/01/2022'即可。
如果使用SQL Server,将末尾的LIMIT 1替换为TOP 1放在SELECT后面即可;如果使用Oracle,末尾添加FETCH FIRST 1 ROW ONLY即可。

兼容并列最高的实现

如果存在多个企业累计金额同为最高的场景,需要返回所有符合条件的企业,可使用窗口函数实现:

SELECT CustAccount
FROM (
    SELECT 
        CustAccount,
        SUM(Amount) AS total_amount,
        -- 按累计金额倒序排名,金额相同排名一致
        RANK() OVER(ORDER BY SUM(Amount) DESC) AS rank_num
    FROM CustTrans
    WHERE TransDate BETWEEN '2000-01-01' AND '2022-01-31'
    GROUP BY CustAccount
) AS cust_rank
WHERE rank_num = 1;

内容的提问来源于stack exchange,提问作者Иван Шарыгин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:48:05