|
jinaqu 发表于 2014-12-18 21:41 ![]()
我目前还在琢磨第二个,在网上有看到大神贴的代码,甚是佩服,我这里分享给大家,多提意见哈!!
with b1 as (
select a1.lession_id,a1.lession_name,a2.stu_id,a3.stu_name,a2.score
from t_lession a1
left join t_score a2 on (a1.lession_id=a2.lession_id)
left join t_stu_profile a3 on (a2.stu_id=a3.stu_id)
),
b2 as(
select lession_name,stu_name||'+'||score mean,rn from (
select lession_name,stu_name,score,row_number() over (PARTITION by lession_id order by score desc) rn from b1
) where rn<=3
)
select lession_name,max(decode(rn,1,mean,'')) 第一名,max(decode(rn,2,mean,'')) 第二名,max(decode(rn,3,mean,'')) 第三名
from b2 group by lession_name |
|