mysql - 加入多个计数的mysql查询

标签 mysql join count

我的 table :

锦标赛

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

任何帮助表示赞赏。谢谢

最佳答案

您想要一个经典的数据透视表。因此你的声明应该是这样的:

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了解更多详情。

关于mysql - 加入多个计数的mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129330/

相关文章:

php - 一对多关系数据库的 JOIN 的 php 部分的困难

mysql - 查询(子查询)中的位置不起作用

php - MYsql使用与连接表相同的字段

sql-server - SQL 连接和计数

MySQL 使用 COUNT 扩展 SELECT 查询

SQL 选择如果计数

php - 使用限制时sql查询返回错误

mysql复制需要有两台master服务器

php - MySQL JOIN 和 DATE 比较/操作

postgresql - 动态 SQL 循环时处理结果