加入多个计数的mysql查询

时间:2016-12-13 19:45:38

标签: mysql join count

我的桌子:

比赛

 _______________________________________
| id |        name          | date      |
|---------------------------|-----------|
| 12 | mytournament         | 2016-01-01|
|---------------------------|-----------|

玩家

 ________________________
| idt |   name      | cat |
|-------------------|-----|
|  12 | john        |  A  |
|  12 | bobby       |  A  |
|  12 | anna        |  B  |
|  12 | Fritz       |  B  |
|  12 | george      |  C  |
|-------------------|-----|

我需要一个返回此内容的查询:

id | name | date | nr of cat A | nr of cat B | nr of cat C 

12 | mytournament | 2016-01-01 | 2 | 2 | 1

我对多次计数存在问题...无法弄清楚如何加入查询。

select t.id, t.name, t.date, count(p.cat) as countA from tournaments t join players p on (t.id = p.idt)

但是我无法弄清楚如何指定它应该只计算cat = A的计数以及如何为B和C添加额外的计数。

任何帮助表示赞赏。感谢

1 个答案:

答案 0 :(得分:1)

您需要经典的数据透视表。因此,您的陈述应如下所示:

SELECT t.id, t.name, t.date,
       COUNT(
            CASE 
                WHEN p.`cat`='A' 
                THEN 1 
                ELSE NULL 
            END
       ) AS 'countA',
       COUNT(
            CASE 
                WHEN p.`cat`='B' 
                THEN 1 
                ELSE NULL 
            END
       ) AS 'countB',
       COUNT(
            CASE 
                WHEN p.`cat`='C' 
                THEN 1 
                ELSE NULL 
            END
       ) AS 'countC'
FROM tournaments t 
INNER JOIN players p ON t.id = p.idt
GROUP BY t.id;

有关详细信息,请查看此Stack overflow question and its answer