3

そのようなテーブルがあるとしましょう(日付順):

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' 値を持つ後続の行をグループ化し、それらをカウントしたい:

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

ストアド プロシージャを作成してカーソルを使用することを考えていましたが、ネストされた SELECT などを使用するなど、より簡単な解決策があるかどうかも疑問に思っていました。

私の質問は、配列をグループ化してカウントする方法に非常に似ていますが、それはPHPに関するものです。

4

1 に答える 1

1

そのために、いくつかの変数、テーブル構造を使用しました。テスト用に独自の変数を作成しました。それは次のとおりです。

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 で

于 2012-11-26T14:53:54.773 に答える