ランキング達成するためのMySQL

0x01の。需要

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

+----+-------+
| Id | Score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+

例えば、スコア与えられたテーブルに基づいて、クエリは(最高から最低までのスコアで)返す必要があります:

+-------+------+
| Score | Rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

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')

0×02。のニーズに対応

次のようにランクロードマップは次のとおりです。

  • 最初の列として最初、逆の順序でテーブル、。

  • 次のように計算され、表の2番目の列の順位:

    • 各番号は同じが繰り返されることになるので、大きな数がランキングされた後に行くために、独自のより重い重いが、行くことが必要である、ソートテーブルから計算された数よりも大きくなっています。
    • 例えば:999998、98計算ランキング、必要のみよりも数より大きいカウントまたは98の重量に等しく、それは2が計算されるその順位です。
  • 2つのテーブル。

次のようにSQL文は次のとおりです。

SELECT 
    a.Score AS Score,
    (SELECT  COUNT(DISTINCT b.Score) FROM Scores b WHERE b.Score>=a.Score) AS Rank
From 
    Score  a
ORDER BY a.Score DESC;

ATFWUS --Writingにより、2020年3月29日

公開された162元の記事 ウォンの賞賛182 ・は 10000 +を見て

おすすめ

転載: blog.csdn.net/ATFWUS/article/details/105183572