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

MySQL如何按类型求和筛选苹果消费总额高于橙子的客户ID

报错原因

  • 错误代码1111的触发原因是聚合函数不能直接用于WHERE子句:SQL执行顺序中,WHERE是在分组聚合操作之前对原始行做过滤的,此时SUM()这类聚合函数还没有完成计算,无法作为判断条件使用。
  • 你的原逻辑也存在缺陷:没有预先聚合计算苹果的总消费,直接在JOIN后的原表记录上调用SUM()做比较,逻辑不成立。

正确写法

写法1:和你原有思路一致,分别聚合两类商品消费后比对

先分别计算每个客户的橙子总消费、苹果总消费,再关联两个结果做筛选,逻辑直观:

SELECT o.customer
FROM (
    -- 统计每个客户的橙子总消费
    SELECT customer, SUM(payment) AS oranges_paid
    FROM 你的实际表名
    WHERE type = 'Oranges'
    GROUP BY customer
) o
INNER JOIN (
    -- 统计每个客户的苹果总消费
    SELECT customer, SUM(payment) AS apples_paid
    FROM 你的实际表名
    WHERE type = 'Apples'
    GROUP BY customer
) a ON o.customer = a.customer
WHERE a.apples_paid > o.oranges_paid
ORDER BY o.customer;

写法2:条件聚合,单轮扫描表完成计算,性能更优

通过CASE表达式做条件聚合,一次计算出每个客户两类商品的总消费,再用HAVING筛选聚合结果,写法更简洁:

SELECT customer
FROM 你的实际表名
GROUP BY customer
HAVING 
    SUM(CASE WHEN type = 'Apples' THEN payment ELSE 0 END) 
    > 
    SUM(CASE WHEN type = 'Oranges' THEN payment ELSE 0 END)
ORDER BY customer;

两种写法代入你的示例数据,最终输出结果都是1,符合需求。使用时请把你的实际表名替换为你自己的表名即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:04