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

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

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

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


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

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

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

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

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

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

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

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

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

  


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

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