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

SQL统计两表分类/状态计数及总计结果错误(应为22实际返回242)

源数据表
现有两张数据表,需完成三项统计:

  • 不同分类值(F、M、O)的计数
  • 不同状态值(GL、PD)的计数
  • 上述所有统计项的总计值(正确总计应为22)
    当前查询返回的总计值始终为242,不符合预期:
    当前错误返回结果

当前使用的SQL代码:

select crimes.classification, count(crimes.classification) as 'classifications/statuses'
from crimes
group by classification
union all
select crime_charges.charge_status, count(crime_charges.charge_status)
from crime_charges
group by charge_status
union all
select 'Total', count(crime_charges.charge_status) + count(crimes.classification)
from crime_charges, crimes;
错误原因

最后一段总计逻辑使用from crime_charges, crimes写法会触发隐式交叉连接,生成两张表的笛卡尔积:两表的每一行都会互相匹配,最终统计的基数是两张表行数的乘积,因此计数结果远大于真实值。

修正代码

总计部分改为分别统计两张表的对应行数后再求和,避免笛卡尔积问题:

select crimes.classification, count(crimes.classification) as 'classifications/statuses'
from crimes
group by classification
union all
select crime_charges.charge_status, count(crime_charges.charge_status)
from crime_charges
group by charge_status
union all
select 'Total', 
  (select count(charge_status) from crime_charges) + (select count(classification) from crimes)
;

如果对应字段存在NULL值且需要将NULL纳入统计,将count(字段名)替换为count(*)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:54:21