MySQL은 순위를 달성하기 위해

0x01로. 수요

점수 순위를 달성하기 위해 SQL 쿼리를 작성합니다. 두 점수가 동일한 경우, 두 스코어 (순위) 동일한 순위. 양분 순위에서 연속 된 다음 정수 값해야합니다. 즉, 순위 사이에 "차이"가 없어야합니다.

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

는 0x02.의 요구를 충족

다음 위의 로드맵은 다음과 같습니다

  • 첫 번째 열 첫째 역순 테이블.

  • 다음과 같이 계산 표의 두 번째 열 순위 :

    • 각 숫자는 같은 반복되기 때문에, 그래서 큰 숫자는 순위 후에 갈 자신보다 무거운 중량을 갈 필요가 정렬 된 테이블에서 계산 된 수보다 더 크다.
    • 예를 들어 98 중량 같 그것 2 순위를 산출하는 것은보다 98 순위 계산 999,998, 필요한 경우에만 번호를 더 계산.
  • 함께 두 개의 테이블.

다음과 같이 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