leetcode 178 分數排名

2021-10-01 11:34:48 字數 1935 閱讀 8899

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, score)

values

('2'

,'3.65'

)insert

into scores (id, score)

values

('3'

,'4.0'

)insert

into scores (id, score)

values

('4'

,'3.85'

)insert

into scores (id, score)

values

('5'

,'4.0'

)insert

into scores (id, score)

values

('6'

,'3.65'

)

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

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

首先這是乙個排序,然後需要對排序的名次做乙個修改,因為一般的排序對於相同的元素其實是區分了先後次序的,而這個先後次序是會影響名次的,因此我們可以通過distinct消除這個先後次序帶來的影響。並且排序過後的記錄雖然有序,但是其名次還要需要欄位rank(原表不存在,所以需要用到as來將其表示出來)指示,而對於名次一般是採用各個值相互比較的方法來求得。

詳細分析見**。

# write your mysql query statement below

#大前提下對score進行排序,再在結果的表中新增rank欄位

#rank的確定要靠score值的比較來確定,所以要指定原表的兩個別名s1,s2以方便比較

#利用關鍵字已去除重複score的影響(即order的影響)

leetcode178 分數排名

sql架構 編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 例如,根據上述給定的 scores 表,你的查詢應該返回 按分數從高到低排列 排序score,找出有多少個scor...

LeetCode 178 分數排名

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

LeetCode 178 分數排名

編寫乙個 sql查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,評分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 建表 create table scores id int score decimal 3 2 insert into scor...