MySQL分數排名問題

2021-10-02 03:56:30 字數 1295 閱讀 7704

今天在做leetcode的mysql題中遇到了一道題。

編寫乙個 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)相同,也就是說如果班上有50個同學,全部的考分都是一樣,那就只有乙個排名(第一名);如果考分只有90分和80分,那就只有兩個排名(第一名和第二名)。【排名和人數無關】

那我們將考分去重統計就知道有幾個排名了。

那我們是不是可以這樣考慮:當前的分數在在班上排第幾名,只要統計(去重)比我大的分數的個數就是我的排名。

將分數按降序排序:select a.score as score from scores a order by score desc;

要統計(去重)比我大的風數的個數就是我的排名:select count(distinct b.score) from scores b where b.score >=我的分數

結合:

select a.score as score ,

(select

count

(distinct b.score)

from scores b

where b.score >=a.score)

as rank from scores a

order

by score desc

;

mysql 分數排名

表table1 欄位1 chengji 成績 欄位2 paiming 排名 50 0 80 0 70 0 20 0 90 0 如何用1條mysql查詢語句,執行後讓他們變成 欄位1 chengji 成績 欄位2 paiming 排名 50 4 80 2 70 3 20 5 90 1 solution...

MySql 分數排名

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

MYSQL分數排名

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