leetcode - Base de datos - 178. Ranking de puntuación

El tema es el siguiente

编写一个 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    |
+-------+------+
重要提示:对于 MySQL 解决方案,如果要转义用作列名的保留字,可以在关键字之前和之后使用撇号。例如 `Rank`

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rank-scores
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Ideas para resolver problemas

Los resultados necesarios se dividen en dos, la primera columna Scorese puede order byordenar para obtener el segundo número de columnas se puede obtener por (puntuación de deduplicación) mayor que una determinada puntuación.

primera fila

select s1.Score from Scores s1 order by s1.Score

la segunda lista

La adquisición de esta columna es principalmente para poder entender, por ejemplo: hay varias puntuaciones (100, 98, 98, 97 ...), para obtener un ranking de 97 puntos, siempre y cuando todas las puntuaciones estén ponderado ( discinct score), y luego las estadísticas son mayores o iguales a 97 puntos son suficientes.

select count(distinct Score) from Score s2 where s2.Score>=x

x es la calificación de cada estudiante en la primera columna de arriba.

Fusionar la primera columna y la segunda columna

select s1.Score,(select count(distinct Score) from Scores s2 where s2.Score>=s1.Score) AS 'Rank' from Scores s1 order by Score DESC

Supongo que te gusta

Origin blog.csdn.net/qq_41262903/article/details/106720669
Recomendado
Clasificación