leetcode-178。スコアランキング

  • タイトル

SQLスキーマ:

Create table If Not 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クエリを記述します。2つのスコアが同一である場合、2つのスコアのランク(ランク)と同じ。二等分ランキングで次の連続整数値でなければならないことに注意してください。言い換えれば、ランキングの間には「ギャップ」があってはなりません。

± - ±------ +
| ID |スコア|
± - ±------ +
| 1 | 3.50 |
| 2 | 3.65 |
。| 3 | 4.00 |
。| 4 | 3.85 |
。| 5 | 4.00 |
| 6 | 3.65 |。
± - ±+ ------
例えば、与えられたテーブルのスコア以上によると、クエリが(最高から最低までのスコアで)返す必要があります:

±------±----- +
| スコア| ランク|
±------±----- +
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
±------±----- +

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/rank-scores
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。

  • 分析

まず、これはソートされ、その後、我々はできるように、実際には同じ要素のランキング一般的なので、優先順位を区別し、これは優先順位のランキングに影響する、ランキングのソートに変更を加える必要があります明確なこれは、影響を排除するためにもたらしました。そして、ソート、レコード注文後、しかし、それはまた、ランクをランク付けするフィールド(オリジナルのテーブルが存在しないので、使用する必要がありますが必要ですなので)で表さ示され、各ランキング方法のために、一般的に相互に比較された値を得るために使用されることができます。
コードの詳細な分析を参照してください。

  • コード
# Write your MySQL query statement below
#大前提下对score进行排序,再在结果的表中添加Rank字段
#Rank的确定要靠score值的比较来确定,所以要指定原表的两个别名s1,s2以方便比较
#利用关键字已去除重复score的影响(即order的影响)
select s1.Score , count(distinct(s2.Score)) as Rank from Scores s1, Scores s2
where s1.Score<=s2.Score group by s1.Id
order by Score desc;

ここに画像を挿入説明
2019年12月15日

公開された52元の記事 ウォン称賛59 ビュー6833

おすすめ

転載: blog.csdn.net/ataraxy_/article/details/103546617