這里userid設(shè)置為1001,這里先統(tǒng)計(jì)每名課程成績大于張三成績的學(xué)生數(shù),然后在統(tǒng)計(jì)的數(shù)上加1即為張三的排名。這里是mysql的測(cè)試,如需在oracle上使用,請(qǐng)把IFNULL函數(shù)換成oracle的NVL函數(shù)。根據(jù)tab后面的數(shù)字閱讀會(huì)清楚一點(diǎn),可以一個(gè)一個(gè)tab先執(zhí)行看結(jié)果。
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),創(chuàng)新互聯(lián)建站面向各種領(lǐng)域:砂巖浮雕等網(wǎng)站設(shè)計(jì)、成都全網(wǎng)營銷解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。
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提供的排名函數(shù)進(jìn)行處理
比如
row_number()
rank()
dense_rank()
ntile()
1、首先在打開的SQL?Server中,假設(shè)有兩條數(shù)據(jù)中,包含有【張】,但是這個(gè)張一前一后,如下圖所示。
2、此時(shí)就能利用Select和From語句,查詢數(shù)據(jù),如下圖所示。
3、但是要查找姓名中包含有【張】,那么不能用等號(hào),如下圖所示。
4、因此一定要必須使用Like關(guān)鍵字,才能查詢SQL的數(shù)據(jù)。
5、這個(gè)時(shí)候,如果單對(duì)【張】字后加個(gè)百分號(hào)是不允許的,這樣只能查找姓張的數(shù)據(jù)。
6、如果想要前后都有關(guān)鍵字【張】,那么一定要在前后都加百分號(hào),就能實(shí)現(xiàn)模糊查找姓名。
如果你是sqlserver的話,語法如下
select?*,row_number()?over(partition?by?[總分]?order?by?[總分]??desc)?as?[排名]?from?(select?[姓名],sum([獎(jiǎng)懲分值])?as?[總分]?FROM?[積分明細(xì)表]?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
如有問題可以追問,我當(dāng)及時(shí)回答。
希望能幫到你!