mysql不分组计数_MySQL数据库Group by分组之后再统计数目Count(*)与不分组直接统计数目的区别...

本文通过一个实际问题——统计最新时刻设备状态数量,探讨了在MySQL中使用Group By分组后进行计数与直接计数的区别。分组后计数在未查询到数据时返回(n/a),可能导致nullpointexception,而直接计数会返回0。建议在未分组的情况下使用count(*)避免异常。
摘要由CSDN通过智能技术生成

简述问题“统计最新时刻处于某一状态的设备的数量”

1. 首先子查询结果,可以看到每个设备最新的状态信息

208698702_1_20201130082121509.png

2.1 在子查询的基础上,对设备状态进行分组,进行统计每个状态的设备数量

2.1.1 可以看到处于'火警'状态的数量是2,没有问题,但是看下一张图

208698702_2_20201130082121775.png

2.1.2 可以看到处于'故障'状态的数量是(n/a),此处便出现问题,如果你将此值返回,service层则会报nullpointexception,进行try...catch可以解决

208698702_3_20201130082121931.png

serviceImpl层处理方式

208698702_4_20201130082122290.png

2.2 在子查询的基础上,不进行分组,直接统计每个状态的数量信息,可以得到正确结果,count如果没有查询到数据,则返回的默认值是0(火警的就不再演示)

208698702_5_20201130082122462.png

结论:

1.子查询中:group by分组和order by排序如果一起使用的话,进行排序的是分组之后的数据

2.外层查询:当进行分组之后进行count(*)查询,当查询不到时,返回的默认值是(n/a),需要在逻辑层进行判断;

不进行分组,使用count(*)查询,此时查询不到的话,返回的默认值是0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值