最近项目中遇到一个分组排名次的问题如下:
数据库里有如下一张表:
depart A B C Group
一支队 1 34.4 3.3 1
二支队 1 33.3 32.2 1
三支队 2 3.3 22.2 1
四支队 3.3 4.4 33.3 1
高新区 2.2 3.3 22.2 2
经开区 3.3 23 33.3 2
曲江区 4.5 35 23.9 2
未央区 12.2 39 3.3 2
长安区 30.3 23 2.2 2
我想用语句实现如下功能,用语句返回来的是如下一张表
depart A B C Group 总分 名次
二支队 1 33.3 32.2 1 66.5 1
四支队 3.3 4.4 33.3 1 41 2
一支队 1 34.4 3.3 1 38.7 3
三支队 2 3.3 22.2 1 27.5 4
曲江区 4.5 35 23.9 2 63.4 1
经开区 3.3 23 33.3 2 59.6 2
长安区 30.3 23 2.2 2 55.5 3
未央区 12.2 39 3.3 2 54.4 4
高新区 2.2 3.3 22.2 2 27.7 5
解决办法:
select *
from
(select a.*,nvl(a.b,0)+nvl(a.c,0) 总分
,row_number() over(partition by group order by nvl(a.b,0)+nvl(a.c,0)) 名次
from tb a
)
order by group,名次