获取条件指向MySQL/SQL中的同一行

Yah*_*hel 3 mysql sql group-by

假设我有一个表Foo,看起来像这样:

ID  | Name  | Gender  | Team
1   | Bob   | Male    | A
2   | Amy   | Female  | A
3   | Cat   | Female  | B
4   | Dave  | Male    | B
5   | Evan  | Male    | B
Run Code Online (Sandbox Code Playgroud)

如果我想获得同一行中每个团队的男性和女性人数列表,我该怎么做?

我知道我能做到SELECT COUNT(Name) as "#", Team, Gender FROM foo GROUP BY Team, Gender,这对大多数人来说都没问题.

但这会给我每队2行,如下所示,这可能是一个痛苦.

#  Team Gender
1 | A | Male
1 | A | Female
1 | B | Female
2 | B | Male
Run Code Online (Sandbox Code Playgroud)

我如何构建查询,使它们出现在同一行?

Team | Males | Females
A    |   1   | 1
B    |   2   | 1
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 5

select team,
 SUM(case when gender='Male' then 1 else 0 end) Male,
 SUM(case when gender='Female' then 1 else 0 end) Female
from tbl
group by team
Run Code Online (Sandbox Code Playgroud)

对于评论

现在想象一下,每一行都有一个与其相关联的任意数字分数,在Score列中.我怎么会有'男性积分'和'女性积分?那是SUM(当性别="男性"然后选择其他0结束时的情况)"男性点数"

你很亲密 答案是

select team,
 SUM(case when gender='Male' then 1 else 0 end) Male,
 SUM(case when gender='Male' then points else 0 end) `Male Points`,
 SUM(case when gender='Female' then 1 else 0 end) Female,
 SUM(case when gender='Female' then points else 0 end) `Female Points`
from tbl
group by team
Run Code Online (Sandbox Code Playgroud)