mysql - 如何对后续行进行分组(基于条件)然后对它们进行计数[MySQL]?

标签 mysql count group-by

假设我有这样一张表(按日期排序):

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

我想将具有相同“名称”值的后续行分组并计算它们:

name | count 
A    | 2
B    | 1
A    | 3

我正在考虑编写存储过程并使用游标,但我也在想,是否有更简单的解决方案,例如使用嵌套 SELECT 等。

我的问题非常类似于:how to group array and count them ,但那一个涉及 PHP。

最佳答案

为此我使用了几个变量, 表结构,我创建了自己的表结构只是为了测试,它是:

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 中看到它的工作原理如果您有任何问题,请告诉我。

在 SQLFIDDLE 中

关于mysql - 如何对后续行进行分组(基于条件)然后对它们进行计数[MySQL]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13566303/

相关文章:

C++ 在将文本文件读入字符串时如何忽略文本文件中的符号/数字?

mysql - 使用 MySQL 检索按小时分组的行

python - 使用新数据更新 Pandas 数据框,同时保留现有 ID 号

python - 如何获取 pandas 数据框中值按行不为零的列数

mysql - 从联接表中选择每组的最新数据

php - Mysql 错误 #1305 FUNCTION db.sys_exec 不存在

php - 如何使用javascript从mysql数据库中获取数据?

sql - 如何为表中的每条记录创建 SELECT 查询?

mysql - 显示全部并计算重复 MySQL

mysql - 如何在不执行两次SQL调用的情况下计算SQL中列中特定值的出现次数