Оператор DISTINCT позволяет выбрать уникальные данные по определенным столбцам.
К примеру, разные товары могут иметь одних и тех же производителей, и, допустим, у нас следующая таблица товаров:
DROP TABLE IF EXISTS products;
CREATE TABLE products
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
company TEXT NOT NULL,
product_count INTEGER DEFAULT 0,
price INTEGER
);
INSERT INTO products (name, company, product_count, price)
VALUES
('iPhone 13', 'Apple', 3, 76000),
('iPhone 12', 'Apple', 3, 51000),
('Galaxy S21', 'Samsung', 2, 56000),
('Galaxy S20', 'Samsung', 1, 41000),
('P40 Pro', 'Huawei', 5, 36000);
Выберем всех производителей:
SELECT company FROM products;
Но при таком запросе производители повторяются. Теперь применим оператор DISTINCT для выборки уникальных значений:
SELECT DISTINCT company FROM products;
Также мы можем задавать выборку уникальных значений по нескольким столбцам:
SELECT DISTINCT company, product_count FROM products;
Здесь для выборки используются столбцы company и product_count. Из пяти строк только для двух строк эти столбцы имеют повторяющиеся значения. Поэтому в выборке будет 4 строки:
Стоит отметить, что SQLite рассматривает значения NULL как повторяющиеся. Поэтому если оператор DISTINCT производит уникальную выборку по столбцу, для которого в нескольких строках значится значение NULL, то оператор DISTINCT отберет из них только одну строку.