oracle分组排序筛选
是不是遇到过这样的场景,我们要按某条件进行分组,分组后对每个组中再按一定条件排序,然后我们再选出每组符合条件的数据,比如我们有一张表,这张表里记录了全班所有人的所有学科的成绩,每条记录中只有一科的成绩,现在要查出每个学科的最高分。
思考
既然要分组,自然会想到 group by, 通过group by 按学科分组,然后再排序,再筛选最高分:
- 然而group by 是统计函数 ,经过group by ;
- PARTITION BY 是分析函数 可以实现
实现
select ci.mfcustomerid 客户号,
ci.customername 姓名,
'IC' 证件类型,
(case
when ii.sex = '1' then
'M'
else
'F'
end) 性别,
'CN' 国籍,
ci.certid 身份证号码,
(case
when ii.Idcardvaliddate is not null then
replace(ii.Idcardvaliddate, '/', '')
else
'0'
end) 有效期限,
'L' 地址类型,
ba.address1 地址,
'LM' 联系方式类型,
ci.Phoneno 联系方式,
'C' 职业类型,
(case ii.Occupation
when '0' then
'111'
when '1' then
'411'
when '3' then
'1311'
when '4' then
'1311'
when '5' then
'1311'
when '6' then
'1311'
when 'X' then
'711'
when 'Y' then
'1611'
when 'Z' then
'1611'
else
''
end) 职业
from (SELECT a.*
FROM (SELECT ROW_NUMBER() OVER(PARTITION BY customerid ORDER BY serialno DESC) rn,
business_apply.*
FROM business_apply) a where a.rn=1) ba, customer_info ci, ind_info ii
where ba.customerid = ci.customerid
and ci.customerid = ii.customerid;
本文探讨如何在Oracle数据库中处理分组数据,按照特定条件排序并选取每组的最高分。通过分析`GROUP BY`和`PARTITION BY`的用法,展示在全科成绩表中查询每门学科最高分的解决方案。

1422

被折叠的 条评论
为什么被折叠?



