按照某特征归并分组计数
【问题】
I want to count all rows that are less then 10 in column "value" but if the next rows also have a value less then 10 only count it as 1(as a group).
So in this exampel I would like to get back the number 3.
I use mysql
So id-2 with value(3) < 10 = +1
Id-4,5,6 value < 10 = +1
Id-9 value < 10 = +1
-- id -- value --
|.. 1 ..|.. 11 ...|
|.. 2 ..|... 3 ...|
|.. 3 ..|.. 12 ...|
|.. 4 ..|... 2 ...|
|.. 5 ..|... 1 ...|
|.. 6 ..|... 3 ...|
|.. 7 ..|.. 15 ...|
|.. 8 ..|.. 24 ...|
|.. 9 ..|... 5 ...|
|. 10 ..|.. 15 ...|
【回答】
直观思路是分组时候不做汇总,且只和相邻的数据比,这样就能把数据依次分为N组:大于等于10、小于10、大于等于10….,再统计出小于10的有几组就可以了。但SQL的分组必须和聚合同时计算,也难以进行相邻数据比较,只能绕道实现,结果代码非常复杂难懂。这种问题用SPL实现,代码更直观易懂:
A |
|
1 |
$select id,value from tb |
2 |
=A1.group@o(value<10) |
3 |
=A2.count(value<10) |
A1:sql取数
A2:相邻数据按照大于等于10,小于10归并分组
A3:计算小于10的有几组