【问题】
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的有几组
该博客讨论了一个SQL查询挑战,即如何计算一列中连续值小于10的行数,但当这些值连续出现时只计数一次。作者提到了在MySQL中解决此问题的复杂性,并建议使用SPL(一种编程语言)来实现更直观的解决方案。
686

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



