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

SQL错误[1111][HY000]:聚合函数使用无效,求利润查询语句问题排查

问题分析与解决

你的查询报错的核心原因有两个:

  1. 聚合函数嵌套使用不当:你在外层SUM()里直接嵌套了内层的sum(t3.amount),这种聚合函数嵌套在常规SQL语法中不被允许,数据库无法直接解析多层聚合逻辑。
  2. 聚合字段与非聚合字段混用:CASE语句里的t2.amount是非聚合字段,但你的GROUP BY仅指定了t1.lot_name,数据库无法确定每个分组中该使用哪个t2.amount值,违反了聚合查询的规则。

修正后的查询语句

先通过子查询算出每个批次(lot_name)对应的销售总金额,再关联采购相关表计算利润:

SELECT 
    ROUND(SUM(CASE 
        WHEN t4.total_sales_amount <= t2.amount THEN 0 
        ELSE t4.total_sales_amount - t2.amount 
    END), 2) AS `Profit`
FROM `tabPurchase Order` AS t1
JOIN `tabPurchase Order Item` AS t2 ON t1.name = t2.parent
JOIN (
    -- 子查询计算每个批次的销售总金额
    SELECT lot_no, SUM(amount) AS total_sales_amount
    FROM `tabSales Order Item`
    WHERE docstatus = 1
    GROUP BY lot_no
) AS t4 ON t1.lot_name = t4.lot_no
WHERE t1.docstatus = 1
GROUP BY t1.lot_name

说明

  • 子查询t4先按批次号(lot_no)聚合,算出每个批次的总销售金额,避免了内层聚合和外层聚合的嵌套冲突。
  • 关联采购订单项后,针对每个采购项的金额t2.amount,和对应批次的总销售金额比较,计算单条采购项的利润,最后通过外层SUM()汇总每个批次的总利润。
  • 把ROUND()放到外层,确保最终结果只做一次四舍五入,避免多次rounding导致的精度误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:33