我的桌子:
比赛
_______________________________________
| 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添加额外的计数。
任何帮助表示赞赏。感谢
答案 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。