LeetCode--178 分数排名

文章目录

题目描述

表: Scores

sql 复制代码
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| score       | decimal |
+-------------+---------+

在 SQL 中,id 是该表的主键。

该表的每一行都包含了一场比赛的分数。Score 是一个有两位小数点的浮点值。

查询并对分数进行排序。排名按以下规则计算:

  • 分数应按从高到低排列。
  • 如果两个分数相等,那么两个分数的排名应该相同。
  • 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。

score 降序返回结果表。

查询结果格式如下所示。

结果示例

示例 1:

输入:

Scores 表:

sql 复制代码
+----+-------+
| id | score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+

输出:

sql 复制代码
+-------+------+
| score | rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

解题思路

  1. 需要按照分数倒序进行排名, 需要用到排名函数, 排名函数有以下几种: RANK(), DENSE_RANK(), ROW_NUMBER()
  2. 如果两个分数相等,那么两个分数的排名应该相同, 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字, 符合这个要求的排名函数是 DENSE_RANK()

MySQL 代码

复制代码
SELECT score , dense_rank() over (order by Score desc) AS "rank" FROM Scores;

知识拓展

MySQL排名函数

相关推荐
长安er29 分钟前
LeetCode 20/155/394/739/84/42/单调栈核心原理与经典题型全解析
数据结构·算法·leetcode·动态规划·
Leo1871 小时前
MySQL 回表(Back to Table)详解
数据库·mysql
遇见火星1 小时前
MySQL 8.0复制架构主从自动切换脚本
mysql·adb·架构·mysql8.0·mysql主从
不知江月待何人..1 小时前
MySQL服务无法启动问题
数据库·mysql
yoke菜籽1 小时前
LeetCode——三指针
算法·leetcode·职场和发展
李少兄2 小时前
一文搞懂什么是关系型数据库?什么是非关系型数据库?
数据库·redis·mysql·mongodb·nosql
会开花的二叉树2 小时前
即时通讯系统核心模块实现
数据库·mysql·elasticsearch
四谎真好看4 小时前
MySQL 学习笔记(运维篇1)
运维·数据库·笔记·学习·mysql·学习笔记
闲看云起4 小时前
LeetCode day3-最长连续序列
算法·leetcode
六毛的毛5 小时前
比较含退格的字符串
开发语言·python·leetcode