Выбрать Top # в Presto SQL?

Действительно ли Presto SQL не хватает функциональности TOP X в операторах SELECT?

Если да, есть ли пока обходной путь?

https://prestodb.io/


person Phillip Deneka    schedule 06.06.2016    source источник
comment
Вы имеете в виду ORDER BY с LIMIT?   -  person Dain Sundstrom    schedule 07.06.2016
comment
На самом деле это две разные вещи.   -  person Phillip Deneka    schedule 07.06.2016
comment
В большинстве случаев TOP N работает так же, как ORDER BY с LIMIT, но я работаю в пограничном случае, когда это не так. Ну что ж. : /   -  person Phillip Deneka    schedule 07.06.2016
comment
Можете ли вы описать, что делает функция TOP X или чего вы пытаетесь достичь?   -  person Dain Sundstrom    schedule 08.06.2016
comment
Вместо этого я рекомендую вам найти время, чтобы проверить разницу между TOP и LIMIT. Эта ссылка является хорошей отправной точкой, но тестирование двух предоставит более подробный анализ. stackoverflow.com/ questions / 5668540 /   -  person Phillip Deneka    schedule 16.06.2016
comment
Согласно этому сообщению и всей связанной документации в этом сообщении, TOP и LIMIT совпадают. Что конкретно вы пытались сделать?   -  person Dain Sundstrom    schedule 17.06.2016
comment
@DainSundstrom что-то вроде select mode() within group (order by X) from abc наверное? Это действительный Postgres, и он значительно упрощает жизнь при работе с вложенными подподподзапросами по сравнению с решением, опубликованным как принятый ответ.   -  person Jivan    schedule 12.04.2019


Ответы (1)


Если вы просто хотите ограничить количество строк в наборе результатов, вы можете использовать LIMIT с или без ORDER BY:

SELECT department, salary
FROM employees
ORDER BY salary DESC
LIMIT 10

Если вам нужны максимальные значения для каждой группы, вы можете использовать стандартную оконную функцию SQL row_number(). Например, чтобы получить 3 лучших сотрудника в отделе по заработной плате:

SELECT department, salary
FROM (
  SELECT department, salary row_number() OVER (
    PARTITION BY department
    ORDER BY salary DESC) AS rn
  FROM employees
)
WHERE rn <= 3
person David Phillips    schedule 08.06.2016
comment
Для всех остальных это так же близко, как и в Presto. Да, это то, чем я закончил. Использование TOP N делает запрос быстрее и проще для чтения. Я имел дело с большим объемом данных и пытался избежать ограничений памяти. Выполните код несколько раз для подмножеств данных, а затем снова объедините их вместе. Спасибо! - person Phillip Deneka; 16.06.2016
comment
Фу. Это съело мое довольно красивое форматирование. Ха-ха! Еще раз спасибо, Дэвид! - person Phillip Deneka; 16.06.2016