用SQL計算名次

2021-07-11 23:39:24 字數 1230 閱讀 6997

幾天前在csdn回答別人的問題: sql怎樣取得指定人的名次 ,現將結果招錄下來。 

一、測試資料: 

select a.* 

into #tmp_mark 

from ( 

select id=1, myname='小明', mypass=123 

union 

select id=2, myname='小花', mypass=122 

union 

select id=3, myname='小東', mypass=111 

union 

select id=4, myname='小牛', mypass=122 

) a 

二、名次按mypass排列,依次遞增,mypass值相同時名次並列,即要求結果為: 

idmyname 

mypass 

orderno

1 小明

12312小花

12223小牛

12224小東

1113

需要使用臨時表生成排序,使用以下語句: 

select identity(int, 1,1) as orderno, mypass 

into #tmp_order 

from #tmp_mark group by mypass order by mypass desc 

--顯示結果 

select b.*, a.orderno from #tmp_order a,#tmp_mark b where a.mypass=b.mypass order by a.orderno 

--如果只要單獨知道小花排序 

select orderno from #tmp_order a, #tmp_mark b where a.mypass=b.mypass and b.myname='小花' 

三、名次依mypass排列,mypass值相同名次並列,但計算排名,即: 

idmynam 

mypass 

orderno

1 小明

12312小花

12223小牛

12224小東

1114

這個稍為簡單,無需臨時表:

select a.*,myorder=(select count(*) from #tmp_mark where mypass>a.mypass)+1 

from #tmp_mark a order by myorder

使用SQL計算名次

專案中遇到乙個查詢,具體需求是 需要根據考試安排編號和乙個學生的考試資訊編號查詢該考生在本次考試安排中的名次,所以用的一下sql語句 select count 1 as 名次 from t 考試資訊表 where c 考試安排編號 2c92f49f2a5a8e31012a5aa0d7d00024 a...

用SQL排名次的問題

用sql排名次的問題 delphi windows sdk api 在製作乙個貨物銷量排名報表時,我用一名sql語句聯合查詢出了貨物id及對應的銷售總量 sql.text select 貨物id,sum 銷量 as 銷量 from 銷售表 group by 貨物id order by sum 銷量 ...

按照分數進行名次計算 名次排序

乙個元素在乙個序列中的名次是所有比它小的元素個數加上在它左邊出現的與它相同的元素個數 例如 陣列a 4,2,9,2,6 是乙個序列,各元素的名次為ra 2,0,4,1,3 名次計算 templatevoid rank t a,int n,int ra 比較所有元素 for int i 1 i n i...