sql - 每年计算两个不同的值

标签 sql oracle

我有一个包含年份和性别的表格。这是我的表格的示例:

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/

相关文章:

sql - 如何在Oracle中将表中的所有列从null设置为not null

java - 将数组传递给 oracle 过程

oracle - 使用物化 View 跟踪最新版本的记录

MySQL:计算不存在的值

sql - 使用 SQL 查询导入具有重复列名的 CSV

sql - 改进查询以查找两个表之间不同步的值

oracle - 为什么DMML错误日志记录在并行语句中被忽略

oracle - PL/SQL 日志记录 - 如何控制?

sql - 为什么 SQL Server 不能告诉我哪一列导致了错误

php - str_replace all in mysql 和 php