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

MySQL子查询COUNT结果异常:主查询关联后数值不符求助

问题解决步骤

1. 修正子查询的COUNT统计逻辑

你的子查询中count(odl.number IN ('APAC'))用法错误:IN返回布尔值(true/false),而COUNT会统计所有非NULL值,不管结果是true还是false,无法得到符合条件的行数。

替换为以下两种写法之一:

  • COUNT(CASE WHEN odl.number = 'APAC' THEN 1 END):仅当条件满足时返回1,否则返回NULL,COUNT会忽略NULL值,只统计符合条件的行数。
  • SUM(CASE WHEN odl.number = 'APAC' THEN 1 ELSE 0 END):满足条件加1,否则加0,直接求和得到符合条件的数量。

2. 给子查询添加GROUP BY子句

单独执行子查询时,你没有按订单分组,导致返回的是整个数据集的聚合结果,而非每个订单的单独统计。必须添加GROUP BY od.id, od.number,让子查询为每个订单计算对应的APAC数量。

修正后的子查询:

SELECT
    od.id,
    od.number,
    COUNT(CASE WHEN odl.number = 'APAC' THEN 1 END) AS "APAC"
FROM order_data od
LEFT JOIN order_data_line odl ON odl.id_no = od.id
GROUP BY od.id, od.number

3. 移除主查询的多余GROUP BY

主查询中的GROUP BY od.number会导致同一number的行被合并,累加q.APAC的值。由于子查询已经按订单id分组,关联后每个主查询行对应子查询的一行,无需额外分组。

最终完整SQL:

SELECT
    od.number,
    q.APAC
FROM order_data od
LEFT JOIN (
    SELECT
        od.id,
        od.number,
        COUNT(CASE WHEN odl.number = 'APAC' THEN 1 END) AS "APAC"
    FROM order_data od
    LEFT JOIN order_data_line odl ON odl.id_no = od.id
    GROUP BY od.id, od.number
) q ON q.id = od.id

执行后就能得到你期望的结果:

od.number q.APAC
123       3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:25:10