选择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 by
和join
。相关子查询的一个优点是它可以很容易地利用mytable(category)
上的索引。
谢谢,那就是我一直在寻找的! –