我正在尝试获取每个子序列的行数。
初始表可能如下所示:
+----+-------------+
| id | value |
+----+-------------+
| 1 | a |
| 2 | b |
| 3 | b |
| 4 | c |
| 5 | a |
| 6 | a |
| 7 | a |
| 8 | a |
| 9 | c |
| 10| c |
+----+-------------+
查询应该返回每个值序列的项目数:
+----+-------------+
| value | count |
+----+-------------+
| a | 1 |
| b | 2 |
| c | 1 |
| a | 4 |
| c | 2 |
+-------+----------+
到目前为止,我还没有找到解决方案,至少对于大型表来说还不够快。理想情况下,会有一个“分组依据”声明,不会弄乱记录的顺序。
答案 0 :(得分:2)
SELECT value, count(*) FROM (
SELECT value,
(CASE WHEN @v != value THEN @i:=@i+1 ELSE @i END) gid,
@v := value FROM myTable, (SELECT @v:='', @i := 0) vars
) tbl
GROUP BY gid