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

SQL查询问题:按类别统计公司时重复计数的解决方法

解决SQL分组统计公司重复计数的问题

你的问题出在COUNT(s.entity)会统计所有关联的记录,而部分公司对应多条llx_propal条目,导致同一公司被多次计数。要实现每个公司仅统计一次,需要用COUNT(DISTINCT 唯一公司标识)替代普通COUNT。

修改后的查询语句:

SELECT c.label AS category, COUNT(DISTINCT s.rowid) AS company_count
FROM llx_categorie c
INNER JOIN llx_categorie_societe cs ON c.rowid = cs.fk_categorie
INNER JOIN llx_societe s ON cs.fk_soc = s.rowid
INNER JOIN llx_propal p ON s.rowid = p.fk_soc
WHERE p.datec BETWEEN '2023-01-01' AND '2023-01-31'
GROUP BY c.label
ORDER BY category ASC

关键修改说明:

  • 将COUNT(s.entity)改为COUNT(DISTINCT s.rowid):s.rowid是公司表的唯一主键(如果entity是公司唯一标识,也可以用COUNT(DISTINCT s.entity)),确保每个公司仅被计数一次,不受关联llx_propal条数影响。
  • 移除SELECT DISTINCT:按category分组后每个类别仅返回一条结果,该关键字在此处多余。
  • GROUP BY明确使用c.label(若存在类别重名情况,用c.rowid分组更严谨),保证分组逻辑准确。

如果需要先筛选符合日期条件的唯一公司再关联类别统计,也可以用子查询实现,数据量大时性能可能更优:

SELECT c.label AS category, COUNT(DISTINCT cs.fk_soc) AS company_count
FROM llx_categorie c
INNER JOIN llx_categorie_societe cs ON c.rowid = cs.fk_categorie
WHERE cs.fk_soc IN (
    SELECT DISTINCT p.fk_soc
    FROM llx_propal p
    WHERE p.datec BETWEEN '2023-01-01' AND '2023-01-31'
)
GROUP BY c.label
ORDER BY category ASC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:25:19