首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle Sql和MAX

Oracle Sql和MAX
EN

Stack Overflow用户
提问于 2019-02-11 15:23:50
回答 1查看 276关注 0票数 0

我有以下设想:

代码语言:javascript
运行
复制
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

  • 对于ID 1: Warrens > MIC,选择Warrens但sum(Online) =6,并且更大
  • 对于ID 2: MIC> Warren,选择MIC
  • 对于ID 3:没有主要的校园(沃伦斯/MIC),所以选择了最大学分人力资源。er (联机)是最大的,因此选择了Online
  • 对于ID 5:西/东/Online都是小校园,所以选择其中任何一个。

实际中有50多个校园。

EN

回答 1

Stack Overflow用户

发布于 2019-02-11 17:01:42

如果您只需要为每个ID选择最大学分时数,但是如果对于给定ID存在“MIC”或“War伦斯”的学分小时,则应该忽略相同ID的所有其他校区,那么最有效的方法是使用第一个聚合函数,如下所示:

代码语言:javascript
运行
复制
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 (或其中一个校园,如果大多数时间都是平分的话)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54633788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档