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)
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)
| 归档时间: |
|
| 查看次数: |
1854 次 |
| 最近记录: |