LeetCode 178 分數排名

2021-10-08 19:06:03 字數 1564 閱讀 3099

題目:

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

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

表: scores

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

| id | score |

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

| 1 | 3.50 |

| 2 | 3.65 |

| 3 | 4.00 |

| 4 | 3.85 |

| 5 | 4.00 |

| 6 | 3.65 |

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

返回如下結果

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

| score | rank |

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

| 4.00 | 1 |

| 4.00 | 1 |

| 3.85 | 2 |

| 3.65 | 3 |

| 3.65 | 3 |

| 3.50 | 4 |

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

新增表結構和資料
drop table if exists `scores`;

create table `scores` (

`id` int(11) not null,

`score` double(4, 2) null default null,

primary key (`id`) using btree

) engine = innodb character set = utf8 collate = utf8_general_ci row_format = compact;

insert into `scores` values (1, 3.50);

insert into `scores` values (2, 3.65);

insert into `scores` values (3, 4.00);

insert into `scores` values (4, 3.85);

insert into `scores` values (5, 4.00);

insert into `scores` values (6, 3.65);

思路:
# 用到排序 mysql8.0才有以下函式

# rank(): 1,2,3,4,5,5,5,8

# dense_rank(): 1,2,3,4,5,5,5,6

# row_number(): 1,2,3,4,5,6,7,8

/*《視窗函式》 over (partition by 《用於分組的列名》

order by 《用於排序的列名》)

*/

解答:
select score,dense_rank() over( order by score desc) as `rank` from scores

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 相同。請注意,評分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 建表 create table scores id int score decimal 3 2 insert into scor...