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

LEFT JOIN结合GROUP BY时COUNT(*)统计结果异常问题

问题原因与解决方案

问题根源

你的查询用LEFT JOIN关联后,COUNT(*)统计的是关联后的所有行数量,而非你需要的「分组内不同产品的数量」:

  • P-00493/ANY-C2-O在dp_ventes_qty中有3条匹配记录,关联后会生成3行重复数据
  • P-00492/ANY-C4-O在dp_ventes_qty中无匹配记录,关联后保留1行(dp_ventes_qty字段为NULL)
    最终COUNT(*)会得到3+1=4,和预期的2不符。

修正后的SQL

方案1:直接统计分组内唯一产品数

使用COUNT(DISTINCT 产品ID)替代COUNT(*),忽略关联产生的重复行:

SELECT 
  LEFT(
    SUBSTRING_INDEX(dp_ventes_par_segments.ref_article, '/', -1),
    LOCATE('-', SUBSTRING_INDEX(dp_ventes_par_segments.ref_article, '/', -1)) - 1
  ) AS r,
  COUNT(DISTINCT dp_ventes_par_segments.ref_article) AS count
FROM `dp_ventes_par_segments`  
LEFT JOIN dp_ventes_qty 
  ON dp_ventes_par_segments.ref_article = dp_ventes_qty.dp_ventes_id 
GROUP BY r;

方案2:先分组产品表再关联(更高效)

先对产品表按目标规则分组,再关联数量表,避免提前生成重复数据:

WITH product_groups AS (
  SELECT 
    LEFT(
      SUBSTRING_INDEX(ref_article, '/', -1),
      LOCATE('-', SUBSTRING_INDEX(ref_article, '/', -1)) - 1
    ) AS r,
    ref_article
  FROM dp_ventes_par_segments
)
SELECT 
  r,
  COUNT(DISTINCT ref_article) AS count
FROM product_groups
LEFT JOIN dp_ventes_qty 
  ON product_groups.ref_article = dp_ventes_qty.dp_ventes_id 
GROUP BY r;

结果说明

两种方案都会返回:

rcount
ANY2

完全符合你期望的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:17:08