【问题标题】:Join mysql query with multiple counts [duplicate]加入具有多个计数的mysql查询[重复]
【发布时间】:2016-12-13 19:45:37
【问题描述】:

我的桌子:

比赛

 _______________________________________
| 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 添加额外的计数。

任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: mysql join count


    【解决方案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 了解更多详情。

    【讨论】:

    • NULLCASE 语句的默认ELSE,不需要包含它。
    • 非常正确,我通常在这样的答案中使用它来澄清。
    • 效果很好,除了要纠正的错误。在 3 之后应该有 p.cat 而不是 t.cat。谢谢!
    • 抱歉打错了,我已经相应地调整了我的答案。
    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2016-06-02
    • 2012-05-12
    相关资源
    最近更新 更多