用SQL計算名次

來源:互聯網
上載者:User
   幾天前在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值相同時名次並列,即要求結果為:

id myname
mypass
OrderNo
1
小明 123 1
2 小花 122 2
3 小牛 122 2
4 小東 111 3


需要使用暫存資料表產生排序,使用以下語句:

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值相同名次並列,但計算排名,即:

id mynam
mypass
OrderNo
1
小明 123 1
2 小花 122 2
3 小牛 122 2
4 小東 111 4


這個稍為簡單,無需暫存資料表:

select A.*,myOrder=(select count(*) from #tmp_Mark where mypass>a.mypass)+1
from #tmp_Mark A order by myOrder

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.