Шаг 18 - Сортировка записей запроса, предложение ORDER BY

Ранее в запросах, которые мы с вами приводили, результирующие выборки, получались, в произвольном порядке. Что если нужно вывести скажем, список, учеников школы в алфавитном порядке или стоимость товаров по убыванию? Для этого в операторе SELECT предусмотрено предложение ORDER BY. Вот его синтаксис:

------- ORDER BY -- имя столбца ----------------  -------------------------------- .
                 -- порядковый номер столбца ---  --------  ASC  ----------
                                                  --------  DESC ----------
                 -------------------------  ,  -----------------------------------

Для начала, давайте проделаем следующий пример: Показать фактические объемы продаж для каждого офиса, отсортированные в алфавитном порядке по названиям, регионов и в каждом регионе - по названию городов.

SQL> SELECT CITY, REGION, SALES
  2  FROM OFFICES
  3  ORDER BY REGION, CITY
  4  /

CITY                           REGION                             SALES
------------------------------ ------------------------------ ---------
Бубурино                       Восток                           367,911
Красный Мотоцикл               Восток                           692,637
Чугуевск                       Восток                           735,044
Запиндрищинск                  Запад                            186,042
Котрогайка                     Запад                            835,915

Столбец идущий сразу за предложением ORDER BY является ГЛАВНЫМ ключом, столбцы следующие за ним, являются ВТОРОСТЕПЕННЫМИ ключами. Сортировать записи можно как по возрастанию, так и по убыванию.

Например, в следующем выражении: Вывести список офисов, отсортированный по фактическим объемам продаж в порядке убывания.

SQL> SELECT CITY, REGION, SALES
  2  FROM OFFICES
  3  ORDER BY SALES DESC
  4  /

CITY                           REGION                             SALES
------------------------------ ------------------------------ ---------
Котрогайка                     Запад                            835,915
Чугуевск                       Восток                           735,044
Красный Мотоцикл               Восток                           692,637
Бубурино                       Восток                           367,911
Запиндрищинск                  Запад                            186,042

Получаем отсортированные объемы продаж по убыванию, с применением предиката DESC, для сортировки по возрастанию, применяется ASC, вследствие того, что данный тип сортировки применяется по умолчанию, его можно не указывать. Так же, если столбец сортировки вычисляемый и не имеет имени, в выражении ORDER BY можно просто указать его порядковый номер!

Например, вот так: Вывести список офисов, отсортированный по разности между фактическим и плановым объемам продаж в порядке убывания.

SQL> SELECT CITY, REGION, (SALES - TARGET)
  2  FROM OFFICES
  3  ORDER BY 3 DESC
  4  /

CITY                           REGION                         (SALES-TARGET)
------------------------------ ------------------------------ --------------
Красный Мотоцикл               Восток                                117,637
Котрогайка                     Запад                                 110,915
Бубурино                       Восток                                 17,911
Чугуевск                       Восток                                -64,956
Запиндрищинск                  Запад                                -113,958

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

Например: Вывести список офисов, отсортированный в алфавитном порядке по названиям регионов, а в каждом регионе по - разности между фактическим и плановым объемам продаж в порядке убывания.

SQL> SELECT CITY, REGION, (SALES - TARGET)
  2  FROM OFFICES
  3  ORDER BY REGION ASC, 3 DESC
  4  /

CITY                           REGION                         (SALES-TARGET)
------------------------------ ------------------------------ --------------
Красный Мотоцикл               Восток                                117,637
Бубурино                       Восток                                 17,911
Чугуевск                       Восток                                -64,956
Котрогайка                     Запад                                 110,915
Запиндрищинск                  Запад                                -113,958

Таким образом, вам будет легко, задать необходимый порядок сортировки вашего запроса и не будет вызывать особенных трудностей! Пробуйте!


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 24.08.2003