我正在Oracle中创建一个SQL查询,并尝试在case语句中使用min和max聚合函数删除重复行。以下是当前状态下的代码:
select
Student_number,
case
when min(sr.racecd) = max(sr.racecd) then min(sr.racecd) else 'Two or more races'
end as races
输出如下所示
Student Number Race
4322 two or more races
4324 White
当我运行代码时,它将多行合并为一行,并将名称更改为“two or more races”。但是,我遇到的问题是,当它遇到空值时,它也将其更改为“Two or more races”。我如何保持空值不变,或将其更改为未知?另外,当我向查询中添加其他列时,聚合函数的工作方式与我仅查询studentnumber和racecd时的工作方式不同,这是为什么呢?
1条答案
按热度按时间nukf8bse1#
因为NULL不等于任何值,所以如果相等性测试失败,则会转到THEN子句。有很多解决方案。一种是使用COUNT,它忽略NULL,如下所示:
至于添加列的问题,当您添加未聚合的列时,您将被迫将它们包含在GROUP BY中。这会更改查询的粒度和每个组中包含的行,因此会影响结果。如果您想要除student_number之外的更多有关student的信息,您将需要聚合其他列(例如,使用MAX())。