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

选择MySQL中特定列的匹配行数,mysql,select,count,distinct,Mysql,Select,Count,Distinct,我希望计算下表中每个id的匹配行数。尽管一种选择是创建另一个表来跟踪每个类别的计数,但我更愿意在不创建第二个表的情况下解决这个问题(理想情况下也不创建临时表) 我的桌子: +---------+----------------+ | id | category | +---------+----------------+ | 3611383 | AAAAAAAAAAAAAA | | 3611382 | AAAAAAAAAAAAAA | | 3611381 | AAAAAAA

我希望计算下表中每个id的匹配行数。尽管一种选择是创建另一个表来跟踪每个类别的计数,但我更愿意在不创建第二个表的情况下解决这个问题(理想情况下也不创建临时表)

我的桌子:

+---------+----------------+
| 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;

另一种方法是通过和加入进行
分组。关联子查询的一个优点是,它可以很容易地利用
mytable(category)

上的索引。谢谢,这正是我要找的!