How to group subsequent rows (based on a criteria) and then count them [MySQL]?(如何对后续行进行分组(基于标准)然后对它们进行计数 [MySQL]?)
问题描述
假设我有一个这样的表(按日期排序):
Let's say I have such a table (ordered by date):
id | name | type | date
1 | A | 1 | 01-08-2012
2 | A | 2 | 01-08-2012
3 | B | 1 | 02-09-2012
4 | A | 1 | 01-10-2012
5 | A | 4 | 01-10-2012
6 | A | 5 | 02-10-2012
我想对具有相同名称"值的后续行进行分组并对其进行计数:
I want to group subsequent rows that have the same 'name' value and count them:
name | count
A | 2
B | 1
A | 3
我正在考虑编写一个存储过程并使用游标,但我也想知道是否有更简单的解决方案,例如使用嵌套的 SELECT 等.
I was thinking about writing a stored procedure and using cursors, but I was also wondering, if there's a simpler solution, for example using nested SELECTs, etc.
我的问题非常类似于:如何对数组进行分组和计数,但那个是关于 PHP 的.
My question is very similar to: how to group array and count them, but that one concerns PHP.
推荐答案
为此我使用了几个变量,表结构,我创建自己的只是为了测试,它是:
To do that I used a couple of variables, the table structure, I created my own just for testing and it's:
create table abc (id int, name varchar(20),type int);
insert into abc values
( 1 , 'A' , 1 ),
( 2 , 'A' , 2 ),
( 3 , 'B' , 1 ),
( 4 , 'A' , 1 ),
( 5 , 'A' , 4 ),
( 6 , 'A' , 5 )
查询结束是这样的:
set @a:='';
set @counter:=1;
set @groupby:=0;
select *,count(REPEATED) from (select name,if(@a=name,@counter:=@counter+1,@counter:=1) as rep,if(@counter=1,@groupby:=@groupby+1,@groupby) as repeated,@a:=name type from abc) as t group by repeated
您可以在 SQLFIDDLE 中看到它的工作原理,如果您有任何问题,请告诉我知道.
you can see it works in SQLFIDDLE if you have any question let me know.
在 SQLFIDDLE 中
In the SQLFIDDLE
这篇关于如何对后续行进行分组(基于标准)然后对它们进行计数 [MySQL]?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何对后续行进行分组(基于标准)然后对它们进行计数 [MySQL]?


基础教程推荐
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- 带更新的 sqlite CTE 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- 带有WHERE子句的LAG()函数 2022-01-01