选择MySQL中特定列的匹配行数

选择MySQL中特定列的匹配行数

问题描述:

我正在计算下表中每个id的匹配行数。虽然有一种选择是创建另一个表来跟踪每个类别的计数,但我宁愿在不创建第二个表(最好没有临时表)的情况下解决此问题。选择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; 

,但将产品只有一行:

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

一种方法是一个相关子查询:

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

另一种方法是做一个group byjoin。相关子查询的一个优点是它可以很容易地利用mytable(category)上的索引。

+0

谢谢,那就是我一直在寻找的! –