新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这里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
你需要使用sqlserver提供的排名函数进行处理
比如
row_number()
rank()
dense_rank()
ntile()
1、首先在打开的SQL Server中,假设有两条数据中,包含有【张】,但是这个张一前一后,如下图所示。
2、此时就能利用Select和From语句,查询数据,如下图所示。
3、但是要查找姓名中包含有【张】,那么不能用等号,如下图所示。
4、因此一定要必须使用Like关键字,才能查询SQL的数据。
5、这个时候,如果单对【张】字后加个百分号是不允许的,这样只能查找姓张的数据。
6、如果想要前后都有关键字【张】,那么一定要在前后都加百分号,就能实现模糊查找姓名。
如果你是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
在Sqlserver2005+中:
利用:Row_Number() over(order by chengji) 可以显示排名
--sql如句如下:
select *,row_number() over(order by chengji) paiming from Stu
如有问题可以追问,我当及时回答。
希望能帮到你!