2017-10-20 11 views
1

私は、下の表の各IDの一致する行の数を数えたいと思っています。 1つのオプションは、各カテゴリのカウントを追跡する別のテーブルを作成することですが、私は2番目のテーブル(理想的には一時テーブルもなし)を作成せずにこれを解決することをお勧めします。MySQLの特定の列の一致する行の数を選択

マイ表:

+---------+----------------+ 
| id  | category  | 
+---------+----------------+ 
| 3611383 | AAAAAAAAAAAAAA | 
| 3611382 | AAAAAAAAAAAAAA | 
| 3611381 | AAAAAAAAAAAAAA | 
| 3611378 | AAAAAAAAAAAAAA | 
| 3611377 | AAAAAAAAAAAAAA | 
| 3611376 | AAAAAAAAAAAAAA | 
| 3611374 | AAAAAAAAAAAAAA | 
| 3611373 | AAAAAAAAAAAAAA | 
| 3611372 | BBBBBBBBBBBBBB | 
| 3611371 | BBBBBBBBBBBBBB | 
| 3611370 | BBBBBBBBBBBBBB | 
| 3611369 | BBBBBBBBBBBBBB | 
| 3611366 | CCCCCCCCCCCCCC | 
| 3611365 | CCCCCCCCCCCCCC | 
| 3611364 | CCCCCCCCCCCCCC | 
+---------+----------------+ 

所望の出力:

+---------+----------------+---------+ 
| id  | category  | count | 
+---------+----------------+---------+ 
| 3611383 | AAAAAAAAAAAAAA | 8  | 
| 3611382 | AAAAAAAAAAAAAA | 8  | 
| 3611381 | AAAAAAAAAAAAAA | 8  | 
| 3611378 | AAAAAAAAAAAAAA | 8  | 
| 3611377 | AAAAAAAAAAAAAA | 8  | 
| 3611376 | AAAAAAAAAAAAAA | 8  | 
| 3611374 | AAAAAAAAAAAAAA | 8  | 
| 3611373 | AAAAAAAAAAAAAA | 8  | 
| 3611372 | BBBBBBBBBBBBBB | 4  | 
| 3611371 | BBBBBBBBBBBBBB | 4  | 
| 3611370 | BBBBBBBBBBBBBB | 4  | 
| 3611369 | BBBBBBBBBBBBBB | 4  | 
| 3611366 | CCCCCCCCCCCCCC | 3  | 
| 3611365 | CCCCCCCCCCCCCC | 3  | 
| 3611364 | CCCCCCCCCCCCCC | 3  | 
+---------+----------------+---------+ 

私が得ている最も近い

SELECT id, category, count(category) AS c FROM mytable ORDER BY id DESC; 

あるしかし、それ意志製品のみ1行:

+---------+----------------+---------+ 
| id  | category  | c  | 
+---------+----------------+---------+ 
| 3611383 | AAAAAAAAAAAAAA | 8  | 
+---------+----------------+---------+ 

答えて

1

一つの方法相関サブクエリです:

select t.*, 
     (select count(*) from mytable t2 where t2.category = t.category) as c 
from mytable t; 

代替はgroup byjoinを行うことです。相関サブクエリの利点の1つは、mytable(category)のインデックスをすぐに利用できることです。

+0

ありがとう、それは私が探していたものです! –

関連する問題