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

MySQL统计布尔值:如何显示分组中计数为0的结果

解决MySQL统计包含0值分组的问题

问题场景

数据库表Registration结构及数据如下:

StudentIDActivityNumberPayed
111
210
311
420

其中Payed为布尔类型,1表示已支付,0表示未支付。

执行以下查询时:

SELECT ActivityNumber, COUNT(*) as TimesPayed
FROM Registration
WHERE Payed = 1
GROUP BY ActivityNumber

结果不会显示ActivityNumber=2(因为该活动无支付记录);但去掉WHERE子句后,ActivityNumber=2的TimesPayed会被统计为1(因为COUNT(*)会计算所有记录数),不符合需求。期望得到的结果是:

ActivityNumberTimesPayed
12
20

解决方案

可以用SUM()函数替代COUNT(),结合条件判断来统计支付次数:

方法1:使用SUM(CASE)

SELECT ActivityNumber, SUM(CASE WHEN Payed = 1 THEN 1 ELSE 0 END) as TimesPayed
FROM Registration
GROUP BY ActivityNumber

方法2:直接SUM(Payed)

因为MySQL中布尔类型会被当作1和0处理,所以可以简化为:

SELECT ActivityNumber, SUM(Payed) as TimesPayed
FROM Registration
GROUP BY ActivityNumber

这两种方法都会正确统计每个活动的支付人数,包括支付数为0的活动,同时不会把未支付的记录计入统计。

如果你的场景中存在没有任何报名记录的活动(即Registration表中没有对应ActivityNumber的行),那需要先从活动表(比如假设存在Activities表,包含所有活动编号)中获取所有活动,再和Registration表做左连接:

SELECT a.ActivityNumber, COALESCE(SUM(r.Payed), 0) as TimesPayed
FROM Activities a
LEFT JOIN Registration r ON a.ActivityNumber = r.ActivityNumber
GROUP BY a.ActivityNumber

用COALESCE确保没有报名记录的活动统计值显示为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:55:18