題目:
編寫乙個 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...