sql leetcode 178分數排名

2021-10-08 20:35:37 字數 1388 閱讀 7640

編寫乙個 sql 查詢來實現分數排名。

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

--+-------

+| id | score |+--

--+-------

+|1|

3.50||

2|3.65||

3|4.00||

4|3.85||

5|4.00||

6|3.65|+

----+--

----

-+

一、函式

以上函式需與over()搭配使用。

select score, dense_rank(

)over

(order

by score desc)as

'rank'

#因為rank為關鍵字,必須使用『』

from scores

二、採用內部變數

select score, cast(

case

when

@p= score then@r+

0when

@p := score then

@r :=@r+

1else

@r :=@r+

1end

as signed)

as'rank'

from scores,

(select

@r :=0,

@p:=

null

) init

order

by score desc

因為賦值預設為字串,再後面+0轉換型別,轉換成了浮點數,使用cast轉換為整數。

對於所有不滿足@p = score的記錄,將其r+1,且將新的score賦值給@p。在**score不為0的情況下,@pre := score為真;但是在score等於0的情況下,case語句不走任何分支,返回null,**此時@p:= score語句已經執行,後半段@r := @r + 1沒有執行,所以,再加一行else @r := @r + 1。

三、單個比較

每個分數都在表b中找比它高的分數,得出當前分數的排名。

select a.score,

(select

count

(distinct b.score)

from scores as b where b.score >= a.score)

as'rank'

from scores as a

order

by score desc

SQL leetcode178 分數排名

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的sc...

178 分數排名

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 例如,根據上述給定的 scores 表,你的查詢應該返回 按分數從高到低排列 例如,根據上述給定的 scores 表,你的查詢...

178 分數排名

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的 s...