1、首先我們知道的是要排序
select a.score as score
from scores as a
order
by a.score desc
;
2、比較難的是第二部分。
假設現在給你乙個分數x,如何算出它的排名rank呢?
我們可以先提取出大於等於x的所有分數集合h,將h去重後的元素個數就是x的排名。
比如你考了99分,但最高的就只有99分,那麼去重之後集合h裡就只有99乙個元素,個數為1,因此你的rank為1。
先提取集合h:
select b.score
from scores as b
where b.score >= x;
我們要的是集合h去重之後的元素個數,因此公升級為
select
count
(distinct b.score)
from scores b
where b.score >= x as rank;
而從結果的角度來看,第二部分的rank是對應一部分的分數來的,所以這裡的x就是上面的a.score,
select
count
(distinct b.score)
from scores b
where b.score >= a.score as rank;
select a.score as score,
(select
count
(distinct b.score from scores b
where b.score>=a.score)
as'rank'
from scores as a
order
by a desc
;
1、最後輸出的為兩列資料,所以中間要用逗號隔 按照分數進行名次計算 名次排序
乙個元素在乙個序列中的名次是所有比它小的元素個數加上在它左邊出現的與它相同的元素個數 例如 陣列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...
Mysql 獲取成績排序後的名次
其實就是輸出mysql的排序後的行號 rt 獲取單個使用者的成績在所有使用者成績中的排名 可以分兩步 1 查出所有使用者和他們的成績排名 select id,maxscore,rownum rownum 1 as rowno from t user,select rownum 0 b order b...
拓撲排序 確定比賽名次
題目 description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序確定排名。...