我有以下设想:
ID Campus Credit_Hr
===== ====== ====
1 MIC 3
1 Warrens 4
1 Online 3
1 Online 3
2 MIC 5
2 Warrens 3
2 Online 6
3 Online 3
3 Online 3
3 West 2
4 Warrens 3
4 MIC 3
4 West 7
5 Online 3
5 West 3
5 East 3
华莱士和军工队是主要的校园。因此,当沃伦斯和MIC拥有相同的信贷hr时,如ID 4中的,则选择Warren/ MIC
实际中有50多个校园。
发布于 2019-02-11 17:01:42
如果您只需要为每个ID选择最大学分时数,但是如果对于给定ID存在“MIC”或“War伦斯”的学分小时,则应该忽略相同ID的所有其他校区,那么最有效的方法是使用第一个聚合函数,如下所示:
with
sample_data(id, campus, credit_hr) as (
select 1, 'MIC' , 3 from dual union all
select 1, 'Warrens', 4 from dual union all
select 1, 'Online' , 3 from dual union all
select 1, 'Online' , 3 from dual union all
select 2, 'MIC' , 5 from dual union all
select 2, 'Warrens', 3 from dual union all
select 2, 'Online' , 6 from dual union all
select 3, 'Online' , 3 from dual union all
select 3, 'Online' , 3 from dual union all
select 3, 'West' , 2 from dual union all
select 4, 'Warrens', 3 from dual union all
select 4, 'MIC' , 3 from dual union all
select 4, 'West' , 7 from dual union all
select 5, 'Online' , 3 from dual union all
select 5, 'West' , 3 from dual union all
select 5, 'East' , 3 from dual
)
select id,
max(credit_hr) keep (dense_rank first
order by case when campus in ('MIC', 'Warrens') then 0 end)
as max_hr
from sample_data
group by id
order by id
;
ID MAX_HR
----- ------------------
1 4
2 5
3 3
4 3
5 3
您还可以修改查询(添加更多列),以显示最大值是否来自主校园(即,如果该ID有来自某个主要校园的任何学分时间),和/或显示哪个校园的最大时数为该ID (或其中一个校园,如果大多数时间都是平分的话)。
https://stackoverflow.com/questions/54633788
复制相似问题