You need to enable JavaScript to run this app. MySQL统计hasTrackingNb各状态数量 如何展示全部三种状态即使计数为0
优惠活动
大模型
产品
解决方案
定价
更多

MySQL统计hasTrackingNb各状态数量 如何展示全部三种状态即使计数为0

问题根因

你第二次编写的查询不符合预期,核心有两个问题:

  • 使用COUNT(*)统计所有左连接生成的行,哪怕对应盒子不属于shouldBeTracked=1的类型也会被计数
  • 没有对不需要统计的盒子类型做过滤,导致普通盒子的记录也被纳入统计范围

正确查询语句

推荐使用提前过滤符合条件盒子的写法,逻辑更直观:

SELECT J.hasTrackingNb, COUNT(A.id) AS NB
FROM (SELECT 0 hasTrackingNb UNION ALL SELECT 1 UNION ALL SELECT 2) J
LEFT JOIN (
    -- 先筛选出所有需要跟踪类型的盒子
    SELECT box.* FROM box
    INNER JOIN box_type ON box.fk_type = box_type.id
    WHERE box_type.shouldBeTracked = 1
) A ON J.hasTrackingNb = A.hasTrackingNb
GROUP BY J.hasTrackingNb;

如果要在你原来的修改版本基础上调整,只需要修改计数逻辑即可:

SELECT J.hasTrackingNb, COUNT(CASE WHEN box_type.id IS NOT NULL THEN box.id END) AS NB
FROM (SELECT 0 hasTrackingNb UNION ALL SELECT 1 UNION ALL SELECT 2) J
LEFT OUTER JOIN box ON box.hasTrackingNb=J.hasTrackingNb
LEFT OUTER JOIN box_type ON box.fk_type=box_type.id AND box_type.shouldBeTracked=1
GROUP BY J.hasTrackingNb;

逻辑说明

两种写法都能保证:

  • 必须保留hasTrackingNb的三个枚举值,哪怕没有对应记录
  • 仅统计属于shouldBeTracked=1类型的盒子
  • 没有对应记录的状态计数返回0,完全符合预期结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 23:36:00