2017-10-20 91 views
1

我正在計算下表中每個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  | 
+---------+----------------+---------+ 

回答

1

一種方法是一個相關子查詢:

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

另一種方法是做一個group byjoin。相關子查詢的一個優點是它可以很容易地利用mytable(category)上的索引。

+0

謝謝,那就是我一直在尋找的! –