Как ВЫБРАТЬ топ 3 на основе значения атрибута? - PullRequest
3 голосов
/ 17 апреля 2019

Существует таблица, которая имеет 4 столбца: id, имя студента, номер телефона, счет.И я хочу выбрать ТОП-3 студентов по баллам.

таблица:

id|student_name  |phone_num|score

1 | James        | 001350  | 89

2 | Roomi        | 123012  | 78

3 | Sibay        | 123012  | 65

4 | Ellae        | 123012  | 78

5 | Katee        | 123012  | 33

Как видно из таблицы, два ученика имеют одинаковые оценки.Так что они в одном ряду.

Я пытался использовать «LIMIT», но он может выбрать только 3 строки.

SELECT id,student_name,score
FROM table
GROUP BY id,student_name,score
ORDER BY score
LIMIT 3

Ожидаемые результаты:

id|student_name  |score

1 | James        | 89

2 | Roomi        | 78

4 | Ellae        | 78

3 | Sibay        | 65

Спасибо!

Ответы [ 2 ]

6 голосов
/ 17 апреля 2019

Вы захотите использовать функцию ранжирования - я бы порекомендовал Dense Rank.

; with CTE as 
    (Select ID, Student_Name, Score, Dense_Rank() over (order by score desc) as DR
    From Table)

Select *
from CTE
where DR <= 3

Чтобы расширить эту функцию:

Dense_Rank назначит одинаковые связанные значениячисло, затем присвойте следующее наибольшее значение следующему наибольшему числу (по сравнению с Rank, которое пропустит ранги, если есть связи).Например:

Value  Rank  Dense_Rank
1      1     1
3      2     2
3      2     2
7      4     3
8      5     4
6 голосов
/ 17 апреля 2019

Вы хотите использовать DENSE_RANK здесь:

WITH cte AS (
    SELECT id, student_name, score,
        DENSE_RANK() OVER (ORDER BY score DESC) dr
    FROM yourTable
)

SELECT id, student_name, score
FROM cte
WHERE dr <= 3
ORDER BY score DESC;

enter image description here

Другой способ, используя подзапрос, чтобы найти 3 самых высоких отличных результата.:

SELECT id, student_name, score
FROM yourTable
WHERE score IN (SELECT DISTINCT TOP 3 score FROM yourTable ORDER BY score DESC)
ORDER BY score DESC;

Этот второй подход похож на то, что вы пытались сделать.Вот демоверсия для второго запроса:

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...