ORDER BY в SQL

В этой статье вы научитесь сортировать данные, которые возвращает SQL-запрос.

Обычно, когда вы используете оператор SELECT для получения данных из таблицы, строки в результате располагаются в том порядке, в котором они записаны в таблицу. Если вы хотите получить набор результатов в определенном порядке, можно использовать ORDER BY — этот оператор указывает, как сортировать полученные данные. Порядок сортировки по умолчанию — по возрастанию.

Синтаксис

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

SELECT список_столбцов FROM имя_таблицы ORDER BY имя_столбца ASC|DESC;

Пример

Используем ORDER BY на датасете из предыдущих статей. Если еще не работали с ним, скачайте и установите в свою СУБД таблицу Austin_Animal_Center_Intakes.csv (Google Disc →).

Допустим, нам нужны данные по котам, упорядоченные сначала по году, а затем по месяцу.

Для этого можно написать такой запрос:

SELECT year,
       month,
       count,
       animal_type
  FROM austin_animal_center_intakes_by_month
 WHERE animal_type = "Cat"
ORDER BY year, month

Первые несколько строк результата: 

year month count animal_type
2013 10 542 Cat
2013 11 436 Cat
2013 12 331 Cat
2014 1 335 Cat
2014 2 269 Cat
2014 3 353 Cat
2014 4 566 Cat
2014 5 901 Cat
2014 6 821 Cat
2014 7 881 Cat

Теперь используем модификатор DESC, чтобы отсортировать результаты в порядке убывания.

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

SELECT year,
       month,
       count,
       animal_type
  FROM austin_animal_center_intakes_by_month
 WHERE animal_type = "Cat"
 ORDER BY count DESC

Первые несколько строк результата: 

year month count animal_type
2015 6 1103 Cat
2015 5 1009 Cat
2016 5 921 Cat
2017 5 914 Cat
2014 5 901 Cat
2017 6 895 Cat
2014 7 881 Cat
2014 6 821 Cat
2015 8 812 Cat

Примечание. Существует также модификатор ASC, который сортирует результаты в порядке возрастания. На самом деле, добавление этого модификатора избыточно, поскольку SQL и так по умолчанию сортирует по возрастанию.

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

Представьте, что нам нужно переделать предыдущий запрос, чтобы он показывал сначала самые последние данные. Это можно сделать так:

SELECT year,
       month,
       count,
       animal_type
  FROM austin_animal_center_intakes_by_month
 WHERE animal_type = "Cat"
 ORDER BY year DESC, month DESC

Как и ожидалось, результаты будут начинаться с данных за декабрь 2017 года:

Примечание. Если в таблице есть ячейки со значениями NULL, они включаются в сортировку и по умолчанию отображаются последними. Если вы хотите заставить их отображаться первыми, добавьте модификатор NULLS FIRST либо после имени столбца, либо после DESC, если вы сортируете в порядке убывания.

SELECT austin_animal_center_outcomes.monthyear,
       austin_animal_center_outcomes.animal_type,
       austin_animal_center_outcomes.outcome_type,
       austin_animal_center_outcomes.outcome_subtype,
       austin_animal_center_outcomes.sex_upon_outcome,
       austin_animal_center_outcomes.age_upon_outcome
  FROM austin_animal_center_outcomes
 WHERE austin_animal_center_outcomes.outcome_type = "Adoption"
       AND austin_animal_center_outcomes.animal_type = "Cat"
 ORDER BY austin_animal_center_outcomes.outcome_subtype NULLS FIRST
monthyear animal_type outcome_type outcome_subtype sex_upon_outcome age_upon_outcome
2013-10 Cat Adoption   Neutered Male 1 month
2013-10 Cat Adoption   Intact Female 1 month
2013-10 Cat Adoption   Intact Female 1 month
2013-10 Cat Adoption   Intact Male 1 month
2013-10 Cat Adoption   Spayed Female 1 month

Примечание. Существует также модификатор NULLS LAST, но он избыточен, поскольку в ORDER BY значения NULL по умолчанию ставятся последними.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©