MySQL统计1的个数 多个连续的1视作只有一个1

本文介绍了一种在MySQL中统计特定状态(如水阀反冲洗状态)出现次数的方法,通过巧妙使用自定义变量,实现了对连续相同状态的计数,避免了重复计数的问题,并提供了在实际开发场景中的应用实例。

      MySQL统计1的个数,多个连续的1视作一个1:

      上图的统计结果应该是4个1。


      这里我使用使用自定义变量来实现:

      查询结果为预期的4条记录,但是如果重复执行该sql,发现结果不一样:

      这是因为MySQL自定义变量对于仅对于此次连接有效,也就是在一个连接里是共享的。而最后一条记录(id=16)的值为1,在一次查询结束后@last值为1,从而影响下一次查询。后台也经常会使用连接池,连接是可重用的,所以使用在查询前需要对@last进行重置。

      关于自定义变量的一些使用细节,可以参考我的这篇文章。

      但是上面这种写法是用了2条SQL语句,对于后台来说,如果在连接数据库的url上未指定“&allowMultiQueries=true”,将会出现:“bad SQL grammar []”。但是如果想使用一条SQL来完成的话可以这么做:

  


     我在实际开发中的需求是:有一个水阀的数据,0代表反冲洗、1代表关闭。它不断地发送它的状态数据,需要统计今天它的反冲洗次数。类似这样:


 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值