重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果你是sqlserver的话,语法如下
为清河门等地区用户提供了全套网页设计制作服务,及清河门网站建设行业解决方案。主营业务为网站建设、成都做网站、清河门网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
select *,row_number() over(partition by [总分] order by [总分] desc) as [排名] from (select [姓名],sum([奖惩分值]) as [总分] FROM [积分明细表] group by [姓名]) A
with tt as(
select '88' A1,'9' A2
union all
select '55' A1,'9' A2
union all
select '55' A1,'4' A2
union all
select '99' A1,'4' A2
union all
select '99' A1,'1' A2
)
select A1,DENSE_RANK() OVER(ORDER BY A1 desc) as A_1,A2,DENSE_RANK() OVER(ORDER BY A2 desc) as A_2 from tt
select A1,RANK() OVER(ORDER BY A1 desc) as A_1,A2,RANK() OVER(ORDER BY A2 desc) as A_2 from tt
你需要使用sqlserver提供的排名函数进行处理
比如
row_number()
rank()
dense_rank()
ntile()
在Sqlserver2005+中:
利用:Row_Number() over(order by chengji) 可以显示排名
--sql如句如下:
select *,row_number() over(order by chengji) paiming from Stu
如有问题可以追问,我当及时回答。
希望能帮到你!
这里userid设置为1001,这里先统计每名课程成绩大于张三成绩的学生数,然后在统计的数上加1即为张三的排名。这里是mysql的测试,如需在oracle上使用,请把IFNULL函数换成oracle的NVL函数。根据tab后面的数字阅读会清楚一点,可以一个一个tab先执行看结果。
select tab4.kcid,IFNULL((select tab5.kcrank from (select tab3.kcid as kcid,count(*) as kcrank from (select tab2.* from chengji tab2 , (select * from chengji where userid=1001) tab1 where tab2.kcid=tab1.kcid and tab2.cj tab1.cj) tab3 group by tab3.kcid) tab5 where tab4.kcid=tab5.kcid),0)+1 as kcrank from chengji tab4 where tab4.userid=1001