我想计数具有相同serv
和spec
的行。以下查询正确计数行数:
SELECT *, COUNT(*) AS c
FROM table1
GROUP BY serv, spec
但我希望输出显示为:
原件:
+-----+------+------+
| id | serv | spec |
| 500 | 1 | 4 |
| 501 | 5 | 1 |
| 502 | 1 | 4 |
| 503 | 1 | 5 |
| 504 | 5 | 6 |
| 505 | 2 | 4 |
| 506 | 5 | 1 |
| 507 | 2 | 4 |
| 508 | 4 | 3 |
| 509 | 2 | 4 |
+-----+------+------+
期望输出:
+-----+------+------+-------+
| id | serv | spec | count |
| 500 | 1 | 4 | 2 |
| 502 | 1 | 4 | 2 |
| 503 | 1 | 5 | 1 |
| 505 | 2 | 4 | 3 |
| 507 | 2 | 4 | 3 |
| 509 | 2 | 4 | 3 |
| 508 | 4 | 3 | 1 |
| 501 | 5 | 1 | 2 |
| 506 | 5 | 1 | 2 |
| 504 | 5 | 6 | 1 |
+-----+------+------+-------+
由于MySQL不支持窗口函数,您必须在子查询中进行计数,然后将此子查询加入表:
SELECT t.id, t.serv, t.spec, c.cnt
FROM
table1 t INNER JOIN (
SELECT serv, spec, COUNT(*) as cnt
FROM table1
GROUP BY serv, spec
) c ON t.serv = c.serv AND t.spec=c.spec