Как получить 10 лучших значений в postgresql?

У меня простой вопрос:

У меня есть база данных postgresql: Scores(score integer).

Как бы я получил самые высокие 10 баллов быстрее?

ОБНОВИТЬ:

Я буду делать этот запрос несколько раз и стремлюсь к самому быстрому решению.

Ответ 1

Для этого вы можете использовать лимит

select *
from scores
order by score desc
limit 10

Если важна производительность (когда это не так ;-), ищите индекс на счет.


Начиная с версии 8.4, вы также можете использовать стандарт (SQL: 2008) fetch first

select *
from scores
order by score desc
fetch first 10 rows only

Как отметил @Raphvanns, это даст вам буквально first 10 rows. Чтобы удалить повторяющиеся значения, необходимо выбрать distinct строк, например.

select distinct *
from scores
order by score desc
fetch first 10 rows only

SQL Fiddle

Ответ 2

Кажется, что вы ищете ORDER BY в DESC окончательном порядке с LIMIT:

SELECT
 *
FROM
  scores
ORDER BY score DESC
LIMIT 10

Конечно, SELECT * может серьезно повлиять на производительность, поэтому используйте его с осторожностью.

Ответ 3

Обратите внимание, что если есть связи в первых 10 значениях, вы получите только первые 10 строк, а не 10 лучших значений с предоставленными ответами. Пример: если верхние 5 значений 10, 11, 12, 13, 14, 15, но ваши данные содержат 10, 10, 11, 12, 13, 14, 15, вы получите только 10, 10, 11, 12, 13, 14 в качестве верхней 5 с LIMIT

Вот решение, которое будет возвращать более 10 строк, если есть связи, но вы получите все строки, где some_value_column технически находятся в топ-10.

select 
 *
from
  (select
     *,
     rank() (order by some_value_column desc) as my_rank
  from
     mytable) subquery
where my_rank <= 10

Ответ 4

(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date DESC
LIMIT 10)

UNION ALL

(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date ASC    
LIMIT 10)