LeetCode 178 分數排名

2022-09-13 06:30:09 字數 2213 閱讀 8434

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

+----+-------+

| id | score |

+----+-------+

| 1 | 3.50 |

| 2 | 3.65 |

| 3 | 4.00 |

| 4 | 3.85 |

| 5 | 4.00 |

| 6 | 3.65 |

+----+-------+

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

+-------+------+

| score | rank |

+-------+------+

| 4.00 | 1 |

| 4.00 | 1 |

| 3.85 | 2 |

| 3.65 | 3 |

| 3.65 | 3 |

| 3.50 | 4 |

+-------+------+

create

table

ifnot

exists scores (id int, score decimal(3,2

));truncate

table

scores;

insert

into scores (id, score) values ('

1', '

3.5'

);insert

into scores (id, score) values ('

2', '

3.65');

insert

into scores (id, score) values ('

3', '

4.0'

);insert

into scores (id, score) values ('

4', '

3.85');

insert

into scores (id, score) values ('

5', '

4.0'

);insert

into scores (id, score) values ('

6', '

3.65

');

oracle可以使用排名函式進行排名,因為名次之間不應該有「間隔」,所以要使用dense_rank()函式,這個函式排的名次是連續的,rank()函式會跳過(並列排名),mysql依然是使用自定義變數來進行排名。

oracle

select

round(a.score,2) as

score, b.rank

from

scores a

join (select a.*, rownum as

rank

from (select

distinct a.score from scores a order

by a.score desc

) a) b

on a.score =

b.score

order

by b.rank

mysql

select

round(a.score, 2) as

score,

b.rank

from

scores a

join

(

select

a.*, (@rownum :=

@rownum

+1) as

rank

from

(

select

distinct

a.score

from

scores a

) a,

(select(@rownum :=

0)) b

order

bya.score

desc

) b

on a.score =

b.score

order

byb.rank

leetcode178 分數排名

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

leetcode 178 分數排名

sql架構 create table ifnot exists scores id int score decimal 3 2 truncate table scores insert into scores id,score values 1 3.5 insert into scores id,s...

LeetCode 178 分數排名

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