Сортируем данные

Итоговые данные обычно представляют в определённом порядке. Чтобы сортировать данные по указанным полям, применяют команду ORDER BY (англ. order by, «упорядочить по»).
Формат запроса с группировкой и сортировкой:
Скопировать кодSQL
SELECT поле_1, поле_2, ..., поле_n, АГРЕГИРУЮЩАЯ_ФУНКЦИЯ(поле) AS here_you_are FROM таблица WHERE -- если нужно условие GROUP BY поле_1, поле_2, ..., поле_n, ORDER BY -- если необходимо, перечисляем только те поля, --по которым хотим отсортировать таблицу поле_1, поле_2, ..., поле_n, here_you_are;
В отличие от GROUP BY, в блоке с командой ORDER BY перечисляем только те поля, по которым хотим сортировать.
У команды ORDER BY два аргумента. Они отвечают за порядок сортировки в столбцах:
Аргументы команды ORDER BY указывают сразу после поля, по которому сортировали данные:
Скопировать кодSQL
ORDER BY название_поля DESC -- сортируем данные по убыванию ORDER BY название_поля ASC -- сортируем данные по возрастанию
idNamegenreauthordate_pubpagespricerating
1Капитанская дочка5Александр Пушкин1836-01-011301504.7
2Отцы и дети1Иван Тургенев1861-01-012402074.7
3Вишнёвый сад7Антон Чехов1903-01-01601384.4
4Война и мир1Лев Толстой1869-01-011274
5Анна Каренина1Лев Толстой1878-01-0110001264.6
6Цветы для Элджернона4Дэниел Киз1959-01-012502804.7
7Похороните меня за плинтусом...5Павел Санаев1994-01-011841984.1
8Зелёная миля9Стивен Кинг1996-01-014201904.8
9Унесённые ветром1Маргарет Митчелл1936-01-01624358
10Три товарища1Эрих Мария Ремарк1929-01-014701964.7
11На Западном фронте без перемен4Эрих Мария Ремарк1945-01-012002734.6
12Триумфальная арка1Эрих Мария Ремарк1956-01-015202204.7
13Чёрный обелиск1Эрих Мария Ремарк1961-01-014804204.6
14Ночь в Лиссабоне1Эрих Мария Ремарк1959-01-012501874.7
15Жизнь взаймы1Эрих Мария Ремарк1927-01-012402404.6
16Станция на горизонте1Эрих Мария Ремарк1830-01-012104.1
17Евгений Онегин1Александр Пушкин1820-01-017363304.7
Посчитаем количество книг каждого автора и отсортируем данные:
Скопировать кодSQL
SELECT author, COUNT(name) AS cnt FROM books GROUP BY author ORDER BY cnt;
authorcnt
Антон Чехов1
Дэниел Киз1
Иван Тургенев1
Маргарет Митчелл1
Павел Санаев1
Стивен Кинг1
Александр Пушкин2
Лев Толстой2
Эрих Мария Ремарк7
Мы не указали аргумента для ORDER BY, и данные отсортировались по умолчанию — в порядке возрастания количества книг.
Добавим аргумент DESC:
Скопировать кодSQL
SELECT author, COUNT(name) AS cnt FROM books GROUP BY author ORDER BY cnt DESC;
authorcnt
Эрих Мария Ремарк7
Александр Пушкин2
Лев Толстой2
Антон Чехов1
Дэниел Киз1
Иван Тургенев1
Маргарет Митчелл1
Павел Санаев1
Стивен Кинг1
Сразу видно, какого автора предпочитает составитель таблицы! Аргумент DESC вывел данные в порядке убывания.
Команда LIMIT (англ. «предел») ограничивает количество строк в выводе. Её всегда указывают последней в запросе:
Скопировать кодSQL
SELECT поле_1, поле_2, ..., поле_n, АГРЕГИРУЮЩАЯ_ФУНКЦИЯ(поле) AS here_you_are FROM таблица WHERE -- если необходимо условие GROUP BY поле_1, поле_2, ..., поле_n, ORDER BY -- если необходимо, перечисляем только те поля, --по которых хотим отсортировать таблицу поле_1, поле_2, ..., поле_n, here_you_are LIMIT -- если необходимо n; -- n-максимальное количество строк, которое вернёт такой запрос
После LIMIT указывают требуемое число строк — n. Удобнее строить рейтинг из ограниченного числа элементов.
Например, выведем топ-3 книг по количеству страниц:
Скопировать кодSQL
SELECT name, pages FROM books ORDER BY pages DESC LIMIT 3;
namepages
Война и мир1274
Анна Каренина1000
Евгений Онегин736
Многие читали Толстого так: «Войну читаю, мир пропускаю». Или наоборот. Не пытайтесь повторить этот трюк в Практикуме — теория и задачи здесь одинаково важны.