Для инструкции выборки сортировка по убыванию реализована с помощью функции

При выборке данных бывает важно получить их в определенном упорядоченном виде. Сортировка может быть выполнена по любым полям с любым типом данных. Это может быть сортировка по возрастанию или убыванию для числовых полей. Для символьных (текстовых) полей это может быть сортировка в алфавитном порядке, хотя по сути, она так же является сортировкой по возрастанию или убыванию. Она так же может быть выполнена в любых направлениях – от А, до Я, и наоборот от Я, до А.

Суть процесса сортировки заключается к приведению последовательности к определенному порядку. Подробней о сортировки можно узнать в статье «Алгоритмы сортировки». Например, сортировка произвольной числовой последовательности по возрастанию:

2, 4, 1, 5, 9

должна привести к упорядоченной последовательности:

1, 2, 4, 5, 6

Аналогично, при сортировке по возрастанию строковых значений:

Иванов Иван, Петров Петр, Иванов Андрей

результат должен быть:

Иванов Андрей, Иванов Иван, Петров Петр

Здесь строка «Иванов Андрей» перешла в начало, так как сравнение строк производится посимвольно. Обе строки начинаются одинаковых символов «Иванов «. Так как символ «А» в слове «Андрей» идет раньше в алфавите, чем символ «И» в слове «Иван», то эта строка будет поставлена раньше.

Сортировка в запросе SQL

Для выполнения сортировки в строку запроса нужно добавить команду ORDER BY. После этой команды указывается поле, по которому производится сортировка.

Для примеров используем таблицу товаров goods:

num
(номер товара)
title
(название)
price
(цена)
1 Мандарин 50
2 Арбуз 120
3 Ананас 80
4 Банан 40

Данные здесь уже упорядочены по столбцу «num». Теперь, построим запрос, который выведет таблицу с товарами, упорядоченными в алфавитном порядке:

SELECT * FROM goods ORDER BY title

SELECT * FROM goods – указывает выбрать все поля из таблицы goods;

ORDER BY – команда сортировки;

title – столбец, по которому будет выполняться сортировка.

Результат выполнения такого запроса следующий:

num title price
3 Ананас 80
2 Арбуз 120
4 Банан 40
1 Мандарин 50

Так же можно выполнить сортировку для любого из полей таблицы.

Направление сортировки

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

SELECT * FROM goods ORDER BY price DESC

Сортировка по возрастанию цены будет:

SELECT * FROM goods ORDER BY price ASC

Сортировка по нескольким полям

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

column1 column2 column3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Отсортируем таблицу по следующим правилам:

SELECT * FROM mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

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

column1 column2 column3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Порядок команды ORDER BY в запросе

Сортировка строк чаще всего проводится вместе с условием на выборку данных. Команда ORDER BY ставится после условия выборки WHERE. Например, выбираем товары с ценой меньше 100 рублей, упорядочив по названию в алфавитном порядке:

SELECT * FROM goods WHERE price < 100 ORDER BY title ASC

При выполнении SELECT запроса, строки по умолчанию
возвращаются в неопределённом порядке. Фактический порядок строк в этом случае
зависит от плана соединения и сканирования, а также от порядка расположения
данных на диске, поэтому полагаться на него нельзя. Для упорядочивания записей
используется конструкция ORDER BY.

Общая структура запроса с оператором ORDER BY

SELECT поля_таблиц FROM наименование_таблицы
WHERE ...
ORDER BY столбец_1 [ASC | DESC][, столбец_n [ASC | DESC]]

Где ASC и DESC — направление сортировки:

  • ASC — сортировка по возрастанию (по умолчанию)
  • DESC — сортировка по убыванию

Сортировка по нескольким столбцам

Для сортировки результатов по двум или более столбцам их следует указывать
через запятую.

...ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC];

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

Правило сортировки применяется только к тому столбцу, за которым оно следует.

ORDER BY столбец_1, столбец_2 DESC

не то же самое, что

ORDER BY столбец_1 DESC, столбец_2 DESC

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

  • Выведем названия авиакомпаний в алфавитном порядке из таблицы Company:

    Сортировка строковых данных по возрастанию подразумевает сортировку в лексикографическом (алфавитном) порядке.

    SELECT name FROM Company ORDER BY name;
    
  • Выведем информацию о полётах, отсортированную по городу вылета самолёта в порядке возрастания и по городу прибытия в аэропорт в порядке убывания, из таблицы Trip:

    SELECT DISTINCT town_from, town_to FROM Trip
    ORDER BY town_from, town_to DESC;
    

    В данном примере в начале записи сортируются по полю town_from. Затем там, если есть несколько записей с одинаковым значением в поле town_from,
    то отрабатывает обратная сортировка по полю town_to.

В этой статье приведены примеры использования оператора ORDER BY для сортировки записей в MySQL.

Синтаксис оператора ORDER BY:

SELECT 
	* 
FROM 
	`table`
ORDER BY 
	`столбец` [ASC | DESC]

SQL

1

Направление сортировки

ASC – (по умолчанию, необязательный). Сортирует набор в порядке возрастания или по алфавиту.

SELECT 
	* 
FROM 
	`table` 
ORDER BY 
	`name` ASC

SQL

DESC – сортирует в порядке убывания.

SELECT
	* 
FROM
	`table` 
ORDER BY 
	`name` DESC

SQL

2

Сортировка по нескольким столбцам

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

SELECT
	* 
FROM 
	`table` 
ORDER BY 
	`name` DESC, `text` DESC

SQL

3

Сортировка по определенной последовательности

С помощью функции FIELD() можно получить записи из БД в нужной последовательности, например вывести первыми записи с определенными `id`.

SELECT 
	* 
FROM 
	`table` 
ORDER BY 
	FIELD(`id`, 1,2,3)

SQL

Также можно скомбинировать сортировку из нескольких полей и показать первыми приоритетные записи, а далее по алфавиту.

SELECT 
	* 
FROM 
	`table` 
 ORDER BY 
 	FIELD(`id`, 1,2,3) DESC, `name`

SQL

Или убрать в конец ненужные записи:

SELECT 
	* 
FROM 
	`table` 
ORDER BY 
	FIELD(`id`, 55), `name`

SQL

4

Сортировка по цене, но исключая нулевые значения

В списках товаров отсортировать значения цен по возрастанию, но при этом нулевые значения были в конце поможет следующий пример.

SELECT 
	*
FROM 
	`table` 
ORDER BY 
	IF(`price` > 0, 0, 1), `price`

SQL

5

Сортировка по данным из другой таблицы

К примеру имеется таблица брендов и товаров, нужно отсортировать бренды по количеству товаров.

SELECT 
	*, 
	(SELECT COUNT(*) FROM `prods` WHERE `brand_id` = `brands`.`id`) AS `prod_count` 
FROM 
	`brands` 
ORDER BY 
	`prod_count` DESC

SQL

6

Сортировка в случайном порядке

SELECT 
	* 
FROM 
	`table` 
ORDER BY 
	RAND()

SQL

7

Сортировка дат

Проблема возникает если даты хранятся в текстовом виде (например 23.09.2020). Если отсортировать таблицу по такому полю, то результате будут перепутаны месяцы.

Даты хранятся в текстовом виде varchar MYSQL

Текстовую дату нужно перевести в тип datetime c помощью функции STR_TO_DATE(), указав нужный формат:

SELECT
	*, 
	STR_TO_DATE(`date`, '%d.%m.%Y') AS `tmp_date`
FROM 
	`table` 
ORDER BY 
	`tmp_date` DESC

SQL

8

Проблема с тапами данных

Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:

SELECT
	*, 
	CAST(`name` AS SIGNED) AS `name_tmp` 
FROM 
	`table` 
ORDER BY 
	`name_tmp`

SQL

или

SELECT
	*
FROM 
	`table` 
ORDER BY 
	CAST(`name` AS SIGNED)

SQL

Для чисел с плавающей точкой:

SELECT
	*
FROM 
	`table` 
ORDER BY 
	CAST(`name` AS DECIMAL(11,2))

SQL

9

Сортировка по количеству символов

SELECT * FROM `table` ORDER BY CHAR_LENGTH(`name`) DESC

SQL

Последнее обновление: 16.05.2018

Оператор ORDER BY сортируют значения по одному или нескольких столбцам. Например, упорядочим выборку из таблицы Products
по столбцу Price:

SELECT * FROM Products
ORDER BY Price;

Оператор order by и сортировка в MySQL

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

SELECT ProductName, ProductCount * Price AS TotalSum
FROM Products
ORDER BY TotalSum;

Сортировка по производным столбцам в MySQL

В качестве критерия сортировки также можно использовать сложно выражение на основе столбцов:

SELECT ProductName, Price, ProductCount
FROM Products
ORDER BY ProductCount * Price;

Сортировка по убыванию

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

SELECT ProductName, ProductCount
FROM Products
ORDER BY ProductCount DESC;

Сортировка по убыванию в MySQL

По умолчанию вместо DESC используется оператор ASC, который сортирует по возрастанию:

SELECT ProductName, ProductCount
FROM Products
ORDER BY ProductCount ASC;

Сотировка по нескольким столбцам

При сортировке сразу по нескольким столбцам все эти столбцы указываются через запятую после оператора ORDER BY:

SELECT ProductName, Price, Manufacturer
FROM Products
ORDER BY Manufacturer, ProductName;

Здесь строки сначала сортируются по столбцу Manufacturer по возрастанию. Затем если есть две строки, в которых столбец Manufacturer
имеет одинаковое значение, то они сортируются по столбцу ProductName также по возрастанию. Но опять же с помощью ASC и DESC можно отдельно для
разных столбцов определить сортировку по возрастанию и убыванию:

SELECT ProductName, Price, Manufacturer
FROM Products
ORDER BY Manufacturer ASC, ProductName DESC;

Сортировка по нескольким столбцам в MySQL

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