Запросы
С помощью оператора DISTINCT можно выбрать уникальные данные по определенным столбцам.
К примеру, разные товары могут иметь одних и тех же производителей, и, допустим, у нас следующая таблица товаров:
USE productsdb; DROP TABLE IF EXISTS Products; CREATE TABLE Products ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(30) NOT NULL, Manufacturer VARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price DECIMAL NOT NULL ); INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ('iPhone X', 'Apple', 3, 71000), ('iPhone 8', 'Apple', 3, 56000), ('Galaxy S9', 'Samsung', 6, 56000), ('Galaxy S8', 'Samsung', 2, 46000), ('Honor 10', 'Huawei', 3, 26000);
Выберем всех производителей:
SELECT Manufacturer FROM Products;
Однако при таком запросе производители повторяются. Теперь применим оператор DISTINCT для выборки уникальных значений:
SELECT DISTINCT Manufacturer FROM Products;
Также мы можем задавать выборку уникальных значений по нескольким столбцам:
SELECT DISTINCT Manufacturer, ProductCount FROM Products;
В данном случае для выборки используются столбцы Manufacturer и ProductCount. Из пяти строк только для двух строк эти столбцы имеют повторяющиеся значения. Поэтому в выборке будет 4 строки:
Количество уникальных значений
У функции count есть еще одна форма — count(DISTINCT выражение) . При такой форме записи функция вернет количество уникальных значений, при этом NULL значения по прежнему не учитываются. Например:
SELECT * FROM table1
value |
---|
1 |
2 |
2 |
2 |
3 |
3 |
NULL |
NULL |
SELECT count(value) AS count_value, count(DISTINCT value) AS count_distinct_value FROM table1
count_value | count_distinct_value |
---|---|
6 | 3 |
Уникальными значениями value таблицы table1 являются 1, 2 и 3.
Практика Количество уникальных значений
4.2 NULL значения в агрегатных функциях
Команда DISTINCT
Команда DISTINCT позволяет выбирать только уникальные значения из базы данных (то есть отсеивает дубли: к примеру, в таблице есть две Маши — тогда запрос выведет только первую).
Синтаксис
SELECT DISTINCT поле FROM имя_таблицы WHERE условие
SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие
SELECT SUM(DISTINCT поле) FROM имя_таблицы WHERE условие
Таблицы для примеров
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | user1 | 23 | 400 |
2 | user2 | 25 | 500 |
3 | user3 | 23 | 500 |
4 | user4 | 30 | 900 |
5 | user5 | 27 | 500 |
6 | user6 | 28 | 900 |
Пример
Давайте выберем все уникальные значения зарплат из таблицы:
SELECT DISTINCT salary FROM employees
Результат выполнения кода:
salary зарплата |
---|
400 |
500 |
900 |
Пример
Давайте подсчитаем все уникальные значения зарплат из таблицы (их будет 3 штуки: 400 , 500 и 1000):
SELECT COUNT(DISTINCT salary) as count FROM employees
Результат выполнения кода:
count количество |
---|
3 |
Пример
Давайте подсчитаем одновременно все уникальные значения зарплат и уникальные значения возрастов и запишем их в разные поля:
SELECT COUNT(DISTINCT salary) as salary_count, COUNT(DISTINCT age) as age_count FROM employees
Результат выполнения кода:
salary_count зарплата | age_count возраст |
---|---|
3 | 5 |
Пример
Давайте просуммируем все уникальные значения зарплат из таблицы employees :
SELECT SUM(DISTINCT salary) as sum FROM employees
Результат выполнения кода:
sum суммарная зарплата |
---|
1900 |
Как в sql выбрать уникальные значения
С помощью DISTINCT можно получить только уникальные значения из столбца таблицы.
SELECT DISTINCT first_name FROM users; first_name ------------ Roman Sean Alex Michal Britney
Кроме того, DISTINCT можно использовать и с несколькими полями сразу:
SELECT DISTINCT first_name, last_name FROM users; first_name | last_name ------------+--------------- Bruce | Williss Sean | Connery Robin | Williams