Перейти к основному содержимому

SQL ORDER BY

Клаузула ORDER BY позволяет указать порядок строк в результате запроса. На практике вы используете ORDER BY, чтобы указать, по какому полю(ям) вы хотите упорядочить данные и в каком порядке (по возрастанию или убыванию). Это полезно при проведении разовых анализов и для создания соответствующих значений столбцов для разделенных строк в оконных функциях.

Как использовать SQL ORDER BY

Клаузулы ORDER BY имеют множество применений в аналитической работе, но чаще всего их используют для:

  • Упорядочивания результата запроса или подзапроса по столбцу или группе столбцов
  • Соответствующего упорядочивания подмножества строк в оконной функции

Чтобы использовать ORDER BY в запросе или модели, используйте следующий синтаксис:

select
column_1,
column_2
from source_table
order by <field(s)> <asc/desc> -- идет после FROM, WHERE и GROUP BY

Вы можете упорядочить результат запроса по нескольким столбцам, указав их имя или номер в операторе select (например, order by column_2 == order by 2). Вы также можете указать тип упорядочивания (по возрастанию или убыванию), чтобы получить нужный порядок строк.

Давайте рассмотрим практический пример использования ORDER BY.

Пример ORDER BY

select
date_trunc('month, order_date') as order_month,
round(avg(amount)) as avg_order_amount
from {{ ref('orders') }}
group by 1
order by 1 desc

Этот запрос, использующий таблицу orders из Jaffle Shop, вернет округленную сумму заказов за каждый месяц в порядке убывания:

order_monthavg_order_amount
2018-04-0117
2018-03-0118
2018-02-0115
2018-01-0117
Loading table...

Синтаксис SQL ORDER BY в Snowflake, Databricks, BigQuery и Redshift

Поскольку ORDER BY является основой SQL, все хранилища данных, включая Snowflake, Databricks, Google BigQuery и Amazon Redshift, поддерживают возможность добавления клаузул ORDER BY в запросы и оконные функции.

Примеры использования ORDER BY

Мы чаще всего используем предложение ORDER BY в работе с данными для следующих задач:

  • Анализ данных как на этапе первичного исследования сырых источников, так и при выполнении ad hoc‑запросов к витринным датасетам
  • Определение топ‑5/10/50/100 записей в наборе данных при использовании в паре с LIMIT
  • (Для Snowflake) Оптимизация производительности больших инкрементальных моделей, которые используют и конфигурацию cluster_by configuration, и предложение ORDER BY
  • Управление порядком внутри партиций оконных функций (например, row_number() over (partition by user_id order by updated_at))

Это не исчерпывающий список того, где ваша команда может использовать ORDER BY в ваших dbt моделях, разовых запросах и логике BI инструментов, но он содержит некоторые общие сценарии, с которыми аналитики сталкиваются ежедневно.

Нашли ошибку?

0
Loading