MySql 分數排名

2021-10-09 19:04:00 字數 1368 閱讀 9035

題目:

編寫乙個 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 |

±------±-----+

解決:

select

s1.score,

( select

count

(distinct score)+1

from

scores s2

where

s2.score > s1.score

)as`rank`

from

scores s1

order by `rank`

解題思路:

利用子查詢查出大於當前成績的個數+1就是排名數,由於同分數同名次,所以distinct去除重複成績。

select 

count

(distinct score)+1

from

scores s2

where

s2.score > s1.score

總結:

利用子查詢查詢每個成績的排名;

mysql自動排序函式dense_rank() over(),rank() over(),row_num() over()。

select 

score,

dense_rank()

over

(order by score desc)

as`rank`

from scores;

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 例如,根據上述給定的 s...

MySQL分數排名問題

今天在做leetcode的mysql題中遇到了一道題。編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85...