我有一个包含年份和性别的表格。这是我的表格的示例:
YEAR Sex
1999 M
1999 M
1999 F
1999 F
我使用这个查询来获取我的结果。
SELECT YEAR,COUNT(*)
FROM athlete_events
WHERE SEX = 'M'
GROUP BY YEAR;
我在输出中看到了这个结果:
YEAR COUNT(*)
1999 2
但是我想看到这个结果:
YEAR COUNT_MALE COUNT_FEMALE
1999 2 2
这在 Pracle SQL 中可能吗?
最佳答案
您可以使用 case 表达式进行条件聚合:
select year,
count(case when sex = 'M' then year end) as count_male,
count(case when sex = 'F' then year end) as count_female
from athlete_events
group by year;
YEAR COUNT_MALE COUNT_FEMALE
---------- ---------- ------------
1999 2 2
count 函数忽略空值,因此不匹配指定标志的行(在 case 表达式中默认为空值;如果您愿意,可以显式设置 else null
) .
(就我个人而言,我更喜欢使用 count()
而不是 sum()
来处理这类事情,因为这样可以更好地反射(reflect)您实际在做什么 - 计数。 )
关于sql - 每年计算两个不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51746115/