Сортировка. ORDER BY

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

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

SELECT * FROM products
ORDER BY price;
Оператор order by и сортировка в SQLite

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

SELECT name, product_count * price AS total_sum
FROM products
ORDER BY total_sum;
Сортировка по производным столбцам в SQLite

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

SELECT name, price, product_count
FROM products
ORDER BY product_count * price;

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

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

SELECT name, product_count
FROM products
ORDER BY product_count DESC;
Сортировка по убыванию в SQLite

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

SELECT name, product_count
FROM products
ORDER BY product_count ASC;

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

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

SELECT name, price, company
FROM products
ORDER BY company, name;

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

SELECT name, price, company
FROM products
ORDER BY company ASC, name DESC;
Сортировка по нескольким столбцам в SQLite

Сортировка по NULL

NULL представляет специальное значение, которое не сравнивается с другими значениями. По умолчанию NULL оценивается как наименьшее из значений. Это значит, что при сортировке по возрастанию значение NULL будет предшествовать всем остальным значениям.

Допустим, у нас есть следующая таблица пользователей:

DROP TABLE IF EXISTS users;
CREATE TABLE users
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
	name TEXT,
	company TEXT,
    age INTEGER
);
INSERT INTO users (name, company, age) VALUES 
('Tom', 'Microsoft', 37),
('Bob', NULL, 41),
('Kate', 'Google', 29),
('Alice', NULL, 33);

Столбец company здесь хранит компанию, где работает пользователь. Но пользователь может не работать, и соответственно столбец будет иметь значение NULL. Отсортируем пользователей по компании:

SELECT * FROM users
ORDER BY company;
Сортировка по NULL в SQLite

Однако поведение по умолчанию, когда NULL идет перед остальными значениями при сортировке по возрастанию или в конце при сортировке по убыванию может быть нежелательным. В этом случае мы можем использовать дополнительные операторы: NULLS FIRST и NULLS LAST. NULLS FIRST указывает, что значение NULL идет перед всеми остальными значениями, а NULLS LAST - после.

Например, выведем значения NULL при сортировке по возрастанию после остальных значений:

SELECT * FROM users
ORDER BY company NULLS LAST;
Сортировка по NULL и NULLS LAST в SQLite
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850