У меня есть таблица, из которой я хочу получить N лучших записей.Записи упорядочены по значениям, а некоторые записи имеют одинаковые значения.То, что я хотел бы сделать здесь, это получить список лучших N записей, включая связанные.Вот что в таблице:
+-------+--------+
| Name | Value |
+-------+--------+
| A | 10 |
| B | 30 |
| C | 40 |
| D | 40 |
| E | 20 |
| F | 50 |
+-------+--------+
Теперь, если я хочу получить топ-3, вот так
SELECT * FROM table ORDER BY Value DESC LIMIT 3
Я получаю это:
+-------+--------+
| Name | Value |
+-------+--------+
| F | 50 |
| C | 40 |
| D | 40 |
+-------+--------+
ЧтоЯ хотел бы получить это
+-------+--------+
| Name | Value |
+-------+--------+
| F | 50 |
| C | 40 |
| D | 40 |
| B | 30 |
+-------+--------+
Я вычисляю ранг каждой записи, так что мне действительно хотелось бы получить первые N ранжированных записей вместо первых N записей, упорядоченных по значению.Вот как я вычисляю ранг:
SELECT Value AS Val, (SELECT COUNT(DISTINCT(Value))+1 FROM table WHERE Value > Val) as Rank
В T-SQL что-то подобное можно сделать, выполнив следующее:
SELECT TOP 3 FROM table ORDER BY Value WITH TIES
У кого-нибудь есть идеи, как это сделать в MySQL?Я понимаю, что это можно сделать с помощью подзапросов или временных таблиц, но у меня недостаточно знаний для этого.Я бы предпочел решение без использования временных таблиц.