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代表关闭。它不断地发送它的状态数据,需要统计今天它的反冲洗次数。类似这样:

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


被折叠的 条评论
为什么被折叠?



