LeetCode力扣刷題資料庫(178) 分數排名

2021-10-03 02:20:07 字數 1407 閱讀 9051

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(rank)相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有「間隔」。

例如,根據上述給定的 scores 表,你的查詢應該返回(按分數從高到低排列):

#將選擇出來的命名為a

select a.score as score

from scores as a;

#排序select a.score as score

from scores as a

order by a.score desc;

#比較難的是第二部分。假設現在給你乙個分數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 as b where b.score>=a.score)as rank

from scores as a

order by a.score desc;

select a.score  as score,

(select count(distinct b.score) from scores as b where b.score>=a.score)as rank

from scores as a

order by a.score desc;

力扣(LeetCode)刷題筆記

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。注 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

力扣LeetCode刷題日記(一)

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

力扣LeetCode刷題日記(二)

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...