Как применять Distinct в MySQL?
Выражение MySQL DISTINCT используется для выборки уникальных значений из указанных столбцов. В этой статье мы покажем, как применять DISTINCT в MySQL с помощью Workbench и командной строки.
Базовый синтаксис запросов SELECT DISTINCT:
SELECT DISTINCT [Columns] FROM Source WHERE Conditions -- это не обязательно
- DISTINCT: это ключевое слово возвращает уникальные результаты;
- Columns: позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
- Source: одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN, чтобы соединить несколько таблиц.
Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:
В этом примере мы отобразим уникальные записи из столбца education, используя SELECT DISTINCT MySQL. Но сначала выведем все значения из этого столбца:
-- MySQL SELECT DISTINCT Example USE company; SELECT Education FROM customerdetails;
Результат:
Теперь я использую ключевое слово DISTINCT:
-- MySQL SELECT DISTINCT Example USE company; SELECT DISTINCT Education FROM customerdetails;
Результат:
Когда мы используем запрос MySQL DISTINCT по нескольким полям, SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession:
-- MySQL SELECT DISTINCT Example USE company; SELECT DISTINCT Education, Profession FROM customerdetails ORDER BY Education, Profession;
Результат:
Несмотря на то, что мы использовали ключевое слово DISTINCT в выражении SELECT, из скриншота, приведенного выше видно, что запрос вернул дублирующие результаты внутри каждого столбца, потому что:
- Bachelors и Developer — это уникальная комбинация;
- Bachelors и Programming — это уникальная комбинация и т.д.
В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE. Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers, в которых годовой доход больше или равен 85000:
-- MySQL SELECT DISTINCT Example USE company; SELECT DISTINCT Education, Profession FROM customerdetails WHERE Yearly_Income > 85000;
Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession, 10 записей не соответствуют условию WHERE. Поэтому на скриншоте показано только 5 записей.
Замечание: Выражение DISTINCT в MySQL воспринимает NULL как допустимое уникальное значение. Поэтому используйте любое NOT NULL условие или функцию, чтобы избавиться от этих значений.
В MySQL DISTINCT наследует поведение от GROUP BY. Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT.
Единственное отличие между ними заключается в следующем:
- GROUP BY сначала сортирует данные, а затем осуществляет группировку;
- Ключевое слово DISTINCTне выполняет сортировки.
Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY, то получите тот же результат, что и при применении GROUP BY. Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails:
-- MySQL SELECT DISTINCT Example USE company; SELECT DISTINCT Profession FROM customerdetails;
Результат:
Уберём ключевое слово DISTINCT и используем выражение GROUP BY:
-- MySQL SELECT DISTINCT Example USE company; SELECT Profession FROM customerdetails GROUP BY Profession;
Как видите, запрос возвращает тот же результат, но в другом порядке:
В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY:
-- MySQL SELECT DISTINCT Example USE company; SELECT DISTINCT Profession FROM customerdetails ORDER BY Profession ASC;
Результат тот же, что и при использовании GROUP BY:
Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails:
-- MySQL SELECT DISTINCT Example USE company; SELECT DISTINCT Education, Profession FROM customerdetails ORDER BY Education ASC, Profession ASC;
Результат:
Данная публикация является переводом статьи «MySQL Distinct» , подготовленная редакцией проекта.
DISTINCT оператор MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать MySQL оператор DISTINCT с синтаксисом и примерами.
Описание
MySQL оператор DISTINCT используется для удаления дубликатов из набора результатов. Оператор DISTINCT может использоваться только с операторами SELECT.
Синтаксис
Синтаксис оператор DISTINCT в MySQL:
SELECT DISTINCT expressions
[WHERE conditions];
Параметры или аргументы
expressions — столбцы или вычисления, которые вы хотите получить.
tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.
WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.
Примечание
- Когда в DISTINCT предусмотрено только одно expressions, запрос возвращает уникальные значения для этого expressions.
- Если в DISTINCT представлено более одного expressions, запрос будет получать уникальные комбинации для указанных expressions.
Пример с одним столбцом
Рассмотрим простейший пример MySQL оператора DISTINCT. Мы можем использовать MySQL DISTINCT, чтобы вернуть один столбец, который удаляет дубликаты из набора результатов.
Например:
SELECT DISTINCT state FROM customers;
SELECT DISTINCT state FROM customers; |
Этот пример MySQL DISTINCT возвращает все уникальные значения state из таблицы customers.
Пример с несколькими столбцами
Рассмотрим пример, как вы можете использовать MySQL оператор DISTINCT для удаления дубликатов из более чем одного столбца в операторе SELECT.
Например:
SELECT DISTINCT city, state FROM customers;
SELECT DISTINCT city, state FROM customers; |
Этот пример MySQL оператора DISTINCT возвращает каждую уникальную комбинацию полей city и state из таблицы customers. В этом случае DISTINCT применяется к каждому столбцу, указанному после ключевого слова DISTINCT, и, поэтому, возвращает отдельные комбинации.
Как SELECT DISTINCT работает в MySQL?
Поведение, которое вы описываете, происходит, когда вы ORDER BY
выражение, которое не присутствует в предложении SELECT
. Стандарт SQL не допускает такого запроса, но MySQL менее строг и допускает его.
Давайте попробуем пример:
SELECT DISTINCT colum1, column2
FROM table1
WHERE ...
ORDER BY column3
Допустим, содержание таблицы table1
таково:
id | column1 | column2 | column3 ----+---------+---------+--------- 1 | A | B | 1 2 | A | B | 5 3 | X | Y | 3
Без предложения ORDER BY
приведенный выше запрос возвращает следующие две записи (без ORDER BY
порядок не гарантируется):
column1 | column2
---------+---------
A | B
X | Y
Но с ORDER BY column3
заказ тоже не гарантирован.
Предложение DISTINCT
оперирует значениями выражений, присутствующих в предложении SELECT
. Если строка #1 обрабатывается первой, то ( A
, B
) помещается в результирующий набор и ассоциируется со строкой #1., а затем , когда строка #2 обрабатывается, значения выражений
производят запись ( A
, B
), которая уже находится в результирующем наборе. Из-за DISTINCT
он отброшен. Строка #3 производит ( X
, Y
), которая также помещается в результирующий набор. Затем предложение ORDER BY column3
сортирует записи в результирующем наборе следующим образом ( A
, B
), ( X
, Y
).
Но если строка #2 обрабатывается до строки #1, то, следуя той же логике, изложенной в предыдущем абзаце, записи в результирующем наборе сортируются следующим образом:(
, Y
), ( A
, B
).
На компонент database engine не накладывается никаких правил относительно порядка обработки строк при выполнении запроса. База данных может свободно обрабатывать строки в любом порядке, который она считает лучшим для производительности.
Ваш запрос недействителен SQL, и тот факт, что он может возвращать разные результаты, используя одни и те же входные данные, доказывает это.
Оператор SQL DISTINCT: примеры, синтаксис
Оператор SQL DISTINCT используется для указания на то, что следует работать только с уникальными значениями столбца.
Оператор SQL DISTINCT нашел широкое применение в операторе SQL SELECT, для выборки уникальных значений. Так же используется в агрегатных функциях.
Оператор SQL DISTINCT имеет следующий синтаксис:
SELECT DISTINCT column_name FROM table_name
Примеры оператора SQL DISTINCT. Имеется следующая таблица Artists:
Singer | Album | Year | Sale |
The Prodigy | Invaders Must Die | 2008 | 1200000 |
Drowning Pool | Sinner | 2001 | 400000 |
Massive Attack | Mezzanine | 1998 | 2300000 |
The Prodigy | Fat of the Land | 1997 | 600000 |
The Prodigy | Music For The Jilted Generation | 1994 | 1500000 |
Massive Attack | 100th Window | 2003 | 1200000 |
Drowning Pool | Full Circle | 2007 | 800000 |
Massive Attack | Danny The Dog | 2004 | 1900000 |
Drowning Pool | Resilience | 2013 | 500000 |
Пример 1. Используя оператор SQL DISTINCT вывести, какие исполнители (Singer) имеются в таблице:
SELECT DISTINCT Singer FROM Artists
Результат:
Singer |
The Prodigy |
Drowning Pool |
Massive Attack |
Пример 2. Используя оператор SQL DISTINCT вывести количество уникальных исполнителей в таблице:
SELECT COUNT(DISTINCT Singer) AS CountOfSingers FROM Artists
Результат:
DISTINCT | Документация ClickHouse
- Справка по SQL
- Выражения
- SELECT
Если указан SELECT DISTINCT
, то в результате запроса останутся только уникальные строки. Таким образом, из всех наборов полностью совпадающих строк в результате останется только одна строка.
Обработк NULL
DISTINCT
работает с NULL как-будто NULL
— обычное значение и NULL==NULL
. Другими словами, в результате DISTINCT
, различные комбинации с NULL
встретятся только один раз. Это отличается от обработки NULL
в большинстве других контекстов.
Альтернативы
Такой же результат можно получить, применив секцию GROUP BY для того же набора значений, которые указан в секции SELECT
, без использования каких-либо агрегатных функций. Но есть от GROUP BY
несколько отличий:
DISTINCT
может применяться вместе сGROUP BY
.- Когда секция ORDER BY опущена, а секция LIMIT присутствует, запрос прекращает выполнение сразу после считывания необходимого количества различных строк.
- Блоки данных выводятся по мере их обработки, не дожидаясь завершения выполнения всего запроса.
Примеры
ClickHouse поддерживает использование секций DISTINCT
и ORDER BY
для разных столбцов в одном запросе. Секция DISTINCT
выполняется до секции ORDER BY
.
Таблица для примера:
┌─a─┬─b─┐
│ 2 │ 1 │
│ 1 │ 2 │
│ 3 │ 3 │
│ 2 │ 4 │
└───┴───┘
При выборе данных с помощью SELECT DISTINCT a FROM t1 ORDER BY b ASC
, мы получаем следующий результат:
┌─a─┐
│ 2 │
│ 1 │
│ 3 │
└───┘
Если мы изменим направление сортировки SELECT DISTINCT a FROM t1 ORDER BY b DESC
, мы получаем следующий результат:
┌─a─┐
│ 3 │
│ 1 │
│ 2 │
└───┘
Ряд 2, 4
был разрезан перед сортировкой.
Учитывайте эту специфику при разработке запросов.
Как обрабатывать в SQL дубликаты с помощью ключевого слова DISTINCT
От автора: у вас может возникнуть ситуация, когда нужно устранить в таблице SQL дубликаты. При извлечении таких записей имеет смысл извлекать только уникальные. Ключевое слово SQL DISTINCT, которое мы уже рассматривали, используется вместе с инструкцией SELECT для устранения всех повторяющихся записей.
Синтаксис
Основной синтаксис ключевого слова DISTINCT для устранения дубликатов записей следующий.
SELECT DISTINCT column1, column2,…..columnN FROM table_name WHERE [condition]
SELECT DISTINCT column1, column2,…..columnN FROM table_name WHERE [condition] |
Пример
Рассмотрим таблицу CUSTOMERS, содержащую следующие записи.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!Сначала давайте посмотрим, как следующий запрос SELECT возвращает повторяющиеся записи.
SELECT SALARY FROM CUSTOMERS ORDER BY SALARY;
SELECT SALARY FROM CUSTOMERS ORDER BY SALARY; |
Это приведет к следующему результату. Зарплата в 2000 будет выдаваться дважды.
Теперь давайте используем ключевое слово DISTINCT с вышеуказанным запросом SELECT и посмотрим на результат.
SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;
SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY; |
В результате дубликаты будут устранены.
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!Хотите изучить MySQL?
Посмотрите курс по базе данных MySQL!
СмотретьMySQL Distinct » BlogLinux.ru — Про свободное программное обеспечение
Синтаксис запросов SELECT DISTINCT в MySQLБазовый синтаксис запросов SELECT DISTINCT:
SELECT DISTINCT [Columns]
FROM Source
WHERE Conditions -- это не обязательно
DISTINCT: это ключевое слово возвращает уникальные результаты;
Columns: позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
Source: одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN, чтобы соединить несколько таблиц.
Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:
DISTINCT-запрос к одному столбцу
В этом примере мы отобразим уникальные записи из столбца education, используя SELECT DISTINCT MySQL. Но сначала выведем все значения из этого столбца:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT Education
FROM customerdetails;
Результат:
Теперь я использую ключевое слово DISTINCT:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education
FROM customerdetails;
Результат:
DISTINCT-запрос к нескольким столбцам
Когда мы используем запрос MySQL DISTINCT по нескольким полям, SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
ORDER BY Education, Profession;
Результат:
Несмотря на то, что мы использовали ключевое слово DISTINCT в выражении SELECT, из скриншота, приведенного выше видно, что запрос вернул дублирующие результаты внутри каждого столбца, потому что:
Bachelors и Developer — это уникальная комбинация;
Bachelors и Programming — это уникальная комбинация и т.д.
Пример DISTINCT-запроса в MySQL – условие WHERE
В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE. Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers, в которых годовой доход больше или равен 85000:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
WHERE Yearly_Income > 85000;
Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession, 10 записей не соответствуют условию WHERE. Поэтому на скриншоте показано только 5 записей.
Замечание: Выражение DISTINCT в MySQL воспринимает NULL как допустимое уникальное значение. Поэтому используйте любое NOT NULL условие или функцию, чтобы избавиться от этих значений.
DISTINCT или GROUP BY в MySQL
В MySQL DISTINCT наследует поведение от GROUP BY. Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT.
Единственное отличие между ними заключается в следующем:
GROUP BY сначала сортирует данные, а затем осуществляет группировку;
Ключевое слово DISTINCTне выполняет сортировки.
Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY, то получите тот же результат, что и при применении GROUP BY. Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Profession
FROM customerdetails;
Результат:
Уберём ключевое слово DISTINCT и используем выражение GROUP BY:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT Profession
FROM customerdetails
GROUP BY Profession;
Как видите, запрос возвращает тот же результат, но в другом порядке:
В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Profession
FROM customerdetails
ORDER BY Profession ASC;
Результат тот же, что и при использовании GROUP BY:
Пример DISTINCT-запроса в MySQL – командная строка
Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
ORDER BY Education ASC, Profession ASC;
Результат:
Использование MySQL DISTINCT для исключения дубликатов
Резюме : в этом руководстве вы узнаете, как использовать предложение MySQL DISTINCT
в операторе SELECT
для удаления повторяющихся строк в наборе результатов.
Введение в MySQL
DISTINCT
clause При запросе данных из таблицы вы можете получить повторяющиеся строки. Чтобы удалить эти повторяющиеся строки, используйте предложение DISTINCT
в операторе SELECT
.
Вот синтаксис предложения DISTINCT
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT DISTINCT select_list ИЗ table_name;
MySQL
DISTINCT
примеры Давайте рассмотрим простой пример использования предложения DISTINCT
для выбора уникальных фамилий сотрудников из сотрудников
стол.
Сначала запросите фамилии сотрудников из таблицы сотрудников
, используя следующий оператор SELECT
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT фамилия ИЗ сотрудники СОРТИРОВАТЬ ПО фамилия;
Попробовать
Как ясно видно из выходных данных, у некоторых сотрудников одинаковая фамилия e.г, Бондур,
Фиррелли
.
Этот оператор использует предложение DISTINCT
для выбора уникальных фамилий из таблицы сотрудников
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT ОТЛИЧИТЕЛЬНАЯ фамилия ИЗ сотрудники СОРТИРОВАТЬ ПО фамилия;
Попробовать
Как видно из выходных данных, повторяющиеся фамилии были исключены из набора результатов.
MySQL
DISTINCT
и NULL
значения Если столбец имеет NULL
значений и вы используете предложение DISTINCT
для этого столбца, MySQL сохраняет только одно значение NULL
, потому что DISTINCT
обрабатывает все значения NULL
как то же значение.
Например, в таблице клиентов
у нас есть много строк, у которых state
столбец имеет NULL
значений.
Когда вы используете предложение DISTINCT
для запроса состояний клиентов, вы увидите уникальные состояния и NULL
в виде следующего запроса:
SELECT DISTINCT state ОТ клиентов;
Попробовать
MySQL
DISTINCT
с несколькими столбцами Вы можете использовать предложение DISTINCT
с несколькими столбцами.В этом случае MySQL использует комбинацию значений в этих столбцах для определения уникальности строки в наборе результатов.
Например, чтобы получить уникальную комбинацию города и штата из таблицы клиентов
, вы используете следующий запрос:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT DISTINCT город-государство ИЗ клиенты КУДА состояние НЕ ПУСТО СОРТИРОВАТЬ ПО государственный, город;
Попробовать
Без предложения DISTINCT
вы получите повторяющуюся комбинацию штата и города следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT город-государство ИЗ клиенты КУДА состояние НЕ ПУСТО СОРТИРОВАТЬ ПО государственный , город;
Попробовать
Предложение DISTINCT
vs. Предложение GROUP BY
Если вы используете предложение GROUP BY
в операторе SELECT
без использования агрегатных функций, предложение GROUP BY
ведет себя так же, как предложение DISTINCT
.
Следующий оператор использует предложение GROUP BY
для выбора уникальных состояний клиентов из таблицы customers
.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ государственный ИЗ клиенты GROUP BY состояние;
Попробовать
Вы можете получить аналогичный результат, используя предложение DISTINCT
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT DISTINCT государственный ИЗ клиенты;
Попробовать
Вообще говоря, предложение DISTINCT
является частным случаем предложения GROUP BY
. Разница между предложением DISTINCT
и предложением GROUP BY
заключается в том, что предложение GROUP BY
сортирует набор результатов, а предложение DISTINCT
— нет.
Обратите внимание, что MySQL 8.0 удалил неявную сортировку для предложения GROUP BY
. Следовательно, если вы используете MySQL 8.0+, вы обнаружите, что набор результатов вышеуказанного запроса с предложением GROUP BY
не отсортирован.
Если вы добавите предложение ORDER BY
к оператору, который использует предложение DISTINCT
, набор результатов будет отсортирован и будет таким же, как тот, который возвращается оператором, который использует предложение GROUP BY
.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ государственный ИЗ клиенты СОРТИРОВАТЬ ПО государственный;
Попробовать
MySQL
DISTINCT
и агрегатные функции Вы можете использовать предложение DISTINCT
с агрегатной функцией, например SUM, AVG, и COUNT, чтобы удалить повторяющиеся строки перед применением агрегатных функций к набору результатов.
Например, чтобы подсчитать уникальные состояния клиентов в U.S., вы используете следующий запрос:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT COUNT (DISTINCT state) ИЗ клиенты КУДА country = 'США';
Попробовать
MySQL
DISTINCT
с предложением LIMIT
Если вы используете предложение DISTINCT
с предложением LIMIT
, MySQL немедленно прекращает поиск, когда находит количество уникальных строк, указанное в предложении LIMIT
.
Следующий запрос выбирает первые пять непустых уникальных состояний в таблице клиентов
.
Язык кода: SQL (язык структурированных запросов) (sql)
ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ государственный ИЗ клиенты КУДА состояние НЕ ПУСТО LIMIT 5;
Попробовать
В этом руководстве мы показали вам различные способы использования предложения MySQL DISTINCT
, например, удаление повторяющихся строк и подсчет ненулевых значения.
- Было ли это руководство полезным?
- Да Нет
MySQL :: Справочное руководство по MySQL 8.0 :: 8.2.1.18 Оптимизация DISTINCT
8.2.1.18 Оптимизация DISTINCT
DISTINCT
в сочетании с ЗАКАЗАТЬ
BY
во многих случаях нуждается во временной таблице.
Поскольку DISTINCT
может использовать GROUP
BY
, узнайте, как MySQL работает со столбцами в ЗАКАЗАТЬ ПО
ИЛИ ПРИ
предложения, которые не являются частью выбранных столбцов.Видеть
Раздел 12.20.3, «Обработка MySQL GROUP BY».
В большинстве случаев предложение DISTINCT
может быть
рассматривается как частный случай GROUP BY
.
Например, следующие два запроса эквивалентны:
ВЫБРАТЬ ОТЛИЧИЕ c1, c2, c3 ОТ t1
ГДЕ c1> const ;
ВЫБЕРИТЕ c1, c2, c3 ИЗ t1
ГДЕ c1> const ГРУППА ПО c1, c2, c3;
Благодаря этой эквивалентности оптимизации, применимые к GROUP BY
запросы также могут применяться к
запросы с предложением DISTINCT
. Таким образом, для
подробнее о возможностях оптимизации для DISTINCT
запросов, см.
Раздел 8.2.1.17, «Оптимизация по группам».
При объединении LIMIT
с row_count
DISTINCT
, MySQL останавливается, как только находит row_count
уникальных строк.
Если вы не используете столбцы из всех таблиц, указанных в запросе,
MySQL прекращает сканирование неиспользуемых таблиц, как только находит
первый матч.В следующем случае, если предположить, что t1
используется до t2
(что вы можете проверить с помощью EXPLAIN
), MySQL перестает читать
от т2
(для любой конкретной строки в t1
), когда он находит первую строку в т2
:
ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ t1.a ОТ t1, t2, где t1.a = t2.a;
MySQL DISTINCT ключевое слово | Рам Кедем
В этом учебном пособии по SQL основное внимание уделяется ключевому слову SQL DISTINCT в MySQL, а также приведены пояснения, примеры и упражнения.Для упражнений этого урока используйте эту ссылку.
Это руководство является частью нескольких статей, в которых объясняется, как писать базовые запросы в MySQL. Чтобы прочитать дополнительные сообщения по этой теме, воспользуйтесь следующими ссылками:
Ключевое слово MySQL DISTINCT
По умолчанию запросы MySQL отображают все строки, включая повторяющиеся строки. Ключевое слово MySQL DISTINCT в предложении SELECT используется для удаления повторяющихся строк и отображения уникального списка значений.
Например: предположим, что у нас есть таблица Books , которая содержит список книг, написанных разными авторами: 4 книги Фрэнка Герберта, 3 книги Стивена Кинга и еще 3 книги Вирджинии Вульф.Вас попросили отобразить уникальный список авторов:
ВЫБЕРИТЕ автора ИЗ книг автор ------------- Фрэнк Герберт Фрэнк Герберт Фрэнк Герберт Фрэнк Герберт Стивен Кинг Стивен Кинг Стивен Кинг Вирджиния Вульф Вирджиния Вульф Вирджиния Вульф
Приведенный выше оператор MySQL не очень полезен, поскольку он извлекает 10 строк (Фрэнк Герберт возвращает 4 раза, Стивен Кинг возвращает 3 раза, а Вирджиния Вульф возвращает 3 раза), тогда как мы намеревались отобразить только 3 авторов.
Чтобы решить эту проблему и получить только уникальные значения, используйте ключевое слово MySQL DISTINCT:
ВЫБЕРИТЕ DISTINCT имя_столбца FROM table_name ВЫБЕРИТЕ ОТЛИЧНОГО автора ИЗ книг
Результат:
автор ------------- Фрэнк Герберт Стивен Кинг Вирджиния Вульф
Примечание : ключевое слово MySQL DISTINCT должно быть включено сразу после ключевого слова MySQL SELECT.
Оператор MySQL DISTINCT для нескольких столбцов
После ключевого слова MySQL DISTINCT можно указать более одного столбца.Квалификатор MySQL DISTINCT влияет на все выбранные столбцы, при этом результат будет отображать уникальную комбинацию значений из разных столбцов. Например, список авторов из разных городов и стран:
Имя автора | Городской | Страна |
Джон Смит | Ливерпуль | Англия |
София Уильямс | Лондон | Англия |
Эмма Миллер | Ливерпуль | Англия |
Оливия Уилсон | Париж | Франция |
Логан Дэвис | Париж | Франция |
Вы можете видеть, что есть два автора из Ливерпуля, Англия, два автора из Парижа, Франция, и еще один автор из Лондона, Англия.
Выполнение оператора MySQL DISTINCT в столбце Country приводит к получению 2 строк (Англия, Париж).
ВЫБЕРИТЕ УНИКАЛЬНУЮ страну ОТ авторов
Выполнение оператора MySQL DISTINCT в столбце City приводит к получению 3 строк (Ливерпуль, Лондон, Париж).
ВЫБЕРИТЕ ОТЛИЧНЫЙ город ОТ авторов
Если вы выполняете оператор MySQL DISTINCT для столбцов City и Country:
ВЫБЕРИТЕ ОТЛИЧИТЕЛЬНЫЙ город, страну ОТ авторов
Получены три результата — Ливерпуль, Англия, Лондон, Англия, Париж, Франция.
7 примеров, объясняющих SQL SELECT DISTINCT (MySQL и SQL Server)
Ваша таблица может содержать повторяющиеся значения в столбце, и в определенных сценариях вам может потребоваться выборка только уникальных записей из таблицы.
Чтобы удалить повторяющиеся записи для данных, полученных с помощью оператора SELECT, вы можете использовать предложение DISTINCT, как показано в примерах ниже.
Демонстрация простого SELECT — DISTINCTВ первом примере я использовал предложение DISTINCT с оператором SELECT для получения только уникальных имен из нашей демонстрационной таблицы, sto_emp_salary_paid .В этой таблице хранятся зарплаты сотрудников вместе с их именами. Таким образом, повторение имен сотрудников происходит в таблице.
Используя предложение DISTINCT, мы получаем только уникальные имена сотрудников:
Запрос:
ВЫБРАТЬ DISTINCT (emp_name) FROM sto_emp_salary_paid;
(применимо к базам данных SQL Server и MySQL)
Использование предложения WHERE с DISTINCTВ этом примере я использовал предложение WHERE с оператором SELECT / DISTINCT, чтобы получить только тех уникальных сотрудников, которым выплаченная зарплата больше или равна 4500.См. Запрос и набор результатов:
Запрос:
ВЫБРАТЬ DISTINCT (emp_name) FROM sto_emp_salary_paid WHERE emp_sal_paid> = 4500; |
Пример функции СЧЁТ с DISTINCT
Вы также можете использовать функцию COUNT SQL для получения количества записей, используя предложение DISTINCT.Функция возвращает только количество строк, возвращенных после предложения DISTINCT.
Для демонстрации я использую таблицу сотрудников, в которой хранится информация о сотрудниках. В демонстрации используются следующие три запроса:
- Первый запрос возвращает полную запись из таблицы
- Второй запрос получает количество сотрудников по идентификатору (COUNT и DISTINCT)
- В то время как третий возвращает уникальные имена сотрудников с использованием столбца emp_name .
Три запроса:
ВЫБРАТЬ * ИЗ sto_employees; SELECT COUNT (DISTINCT id) AS «Всего сотрудников» FROM sto_employees SELECT COUNT (DISTINCT emp_name) AS «Уникальные имена сотрудников» FROM sto_employees |
Предложение DISTINCT с примером GROUP BY
Следующий запрос извлекает записи из той же таблицы, что и в приведенных выше примерах, и группирует зарплату сотрудников.Для этого предложения GROUP BY и DISTINCT используются следующим образом:
Запрос:
ВЫБЕРИТЕ DISTINCT (emp_name), emp_id, SUM (emp_sal_paid) как «Всего выплачено» FROM sto_emp_salary_paid GROUP BY emp_name, emp_id; |
Запись для «Джимми» появляется дважды, так как у нее два разных идентификатора.
Использование предложения HAVING с DISTINCTКак и при использовании предложения GROUP BY с DISTINCT, вы также можете добавить предложение HAVING для выборки записей.В следующем запросе в приведенном выше примере добавлено предложение HAVING, и мы получим записи, сумма которых превышает 5000.
Запрос:
ВЫБЕРИТЕ DISTINCT (emp_name), emp_id, SUM (emp_sal_paid) как «Всего выплачено» FROM sto_emp_salary_paid GROUP BY emp_name, emp_id HAVING SUM (emp_sal_paid)> |
Предложение DISTINCT с ORDER BY, пример
Предложение SQL ORDER BY может использоваться с предложением DISTINCT для сортировки результатов после удаления повторяющихся значений.См. Запрос и вывод ниже:
ВЫБРАТЬ DISTINCT (emp_name) FROM sto_emp_salary_paid ЗАКАЗАТЬ ПО emp_name; |
Результат: Использование нескольких столбцов в предложении DISTINCT
Вы также можете указать два или более столбца, используя предложение SELECT — DISTINCT. Таким образом, наша таблица в качестве примера содержит повторяющиеся значения для сотрудников и их идентификаторов, поэтому было бы неплохо узнать, как предложение DISTINCT возвращает записи при использовании обоих этих столбцов в одном запросе.
Чтобы увидеть разницу, я сначала написал запрос с DISTINCT (emp_name), за которым следуют оба столбца:
Запрос:
ВЫБРАТЬ РАЗЛИЧНОЕ имя emp_name FROM sto_emp_salary_paid ЗАКАЗАТЬ ПО emp_name; ВЫБРАТЬ DISTINCT emp_name, emp_id FROM sto_emp_salary_paid ЗАКАЗАТЬ ПО emp_name; |
Результаты для полной таблицы, запросов DISTINCT emp_name и DISTINCT emp_name, emp_id:
Применение Select Distinct только к одному столбцу
Применение Select Distinct только к одному столбцу 12 августа 2020 г. , Robert GravelleДобавление ключевого слова DISTINCT в запрос SELECT приводит к тому, что он возвращает только уникальные значения для указанного списка столбцов, так что повторяющиеся строки удаляются из набора результатов.Поскольку DISTINCT работает со всеми полями в списке столбцов SELECT, его нельзя применить к отдельному полю, входящему в большую группу. При этом есть способы удалить повторяющиеся значения из одного столбца, игнорируя другие столбцы. Сегодня мы рассмотрим парочку из них.
Для тестирования наших запросов нам понадобится таблица, содержащая повторяющиеся данные. Для этого я добавил несколько дополнительных писем в таблицу клиентов Sakila Sample Database.Вот снимок экрана в представлении сетки Navicat Premium, на котором показан клиент, у которого есть 2 связанных адреса электронной почты:
Если бы мы теперь добавили предложение DISTINCT к запросу, список полей которого содержит другие столбцы, это не сработает, потому что строка в целом уникальна:
Итак, что работает? Давай выясним!
Предложение GROUP BY применяет агрегатные функции к определенному подмножеству данных, группируя результаты по одному или нескольким полям. В сочетании с такой функцией, как MIN или MAX, GROUP BY может ограничить поле первым или последним экземпляром относительно другого поля.
Таким образом, если мы хотим ограничить количество писем одним клиентом, мы могли бы включить подзапрос, который группирует электронные письма по идентификатору клиента. Затем мы можем выбрать другие столбцы, присоединив столбец электронной почты к уникальным столбцам, возвращаемым подзапросом:
Другое, хотя и немного более продвинутое решение — использование оконной функции. Таким образом, оконные функции названы потому, что они выполняют вычисления для набора строк таблицы, связанных с текущей строкой. В отличие от обычных агрегатных функций, оконные функции не заставляют строки группироваться в одну выходную строку, так что строки сохраняют свои отдельные идентификаторы.
ROW_NUMBER () — это оконная функция, которая присваивает последовательное целое число каждой строке в разделе набора результатов, начиная с 1 для первой строки в каждом разделе. В случае электронных писем клиентов 1-е электронное письмо возвращает 1, 2-е — 2 и т. Д. Затем мы можем использовать это значение (обозначенное ниже как «rn»), чтобы выбрать только 1-е электронное письмо для каждого клиента.
Следует отметить, что не все реляционные базы данных поддерживают оконные функции. SQL Server поддерживает их, тогда как MySQL представил их в версии 8.
В сегодняшнем блоге мы узнали, как удалить дубликаты из отдельных полей, которые являются частью большой группы, с помощью функций GROUP BY и Windows. Несомненно, есть много других способов достижения той же конечной цели, но эти два проверенных метода должны вам хорошо послужить.
Заинтересованы в Navicat Premium? Вы можете попробовать его в течение 14 дней совершенно бесплатно для ознакомительных целей!
MySQL Distinct
Оператор MySQL Select Distinct используется для извлечения уникальных строк (путем удаления повторяющихся строк) из указанного столбца в операторе SELECT.
MySQL Выбрать особый синтаксис
Базовый синтаксис команды Select Distinct в MySQL может быть записан как:
SELECT DISTINCT [Столбцы] ИЗ источника ГДЕ Условия - это необязательно
- DISTINCT: Это ключевое слово возвращает уникальные столбцы
- Columns: Это позволяет нам выбрать количество столбцов, которые вы хотите использовать из таблицы. Это может быть один или несколько.
- Источник: Это может быть одна или несколько таблиц в базе данных.Используйте MySQL Joins для объединения нескольких таблиц.
Мы собираемся использовать показанные ниже данные, чтобы объяснить Select Distinct в MySQL на примере.
SQL DISTINCT для одного столбца
В этом примере столбца MySQL Distinct Single мы собираемся выбрать уникальные записи из столбца Education с помощью Select Distinct. Прежде чем мы получим уникальные записи, позвольте мне выбрать все записи из столбца «Образование».
- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ образование ОТ КЛИЕНТА;
Теперь позвольте мне использовать ключевое слово Distinct в операторе SELECT.
- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ ОТЛИЧНОЕ образование ОТ КЛИЕНТА;
Различие MySQL по нескольким столбцам
Когда мы используем MySQL Distinct для нескольких столбцов, оператор SELECT записывает уникальную комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере MySQL мы собираемся выбрать уникальные записи, представленные в столбце «Образование» и «Профессия».
- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ РАЗЛИЧНОЕ образование, профессию ОТ клиентадетали ЗАКАЗАТЬ ПО образованию, профессии;
Хотя мы использовали ключевое слово MySQL Distinct в операторе SELECT.На скриншоте выше видно, что он возвращает дубликаты, потому что
- Бакалавр и разработчик — это уникальное сочетание
- Бакалавр и программирование — это уникальное сочетание и т. Д.
MySQL Distinct Where Clause Example
В этом примере мы покажем вам, как использовать оператор MySQL Select Distinct вместе с предложением WHERE. Следующая инструкция возвращает таблицу «Отличное образование, профессия от клиентов», чей годовой доход больше или равен 85000.
- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ РАЗЛИЧНОЕ образование, профессию ОТ клиентадетали ГДЕ Годовой_Доход> 85000;
Несмотря на то, что существует 13 различных записей для комбинации «Образование, профессиональная колонка». 10 записей не соответствуют условию в предложении Where. Вот почему на скриншоте ниже показано 5 записей.
ПРИМЕЧАНИЕ: Select Distinct рассматривает записи NULL как действительную уникальную запись. Итак, пожалуйста, используйте любую функцию Not Null для удаления NULLS.
MySQL Отдельно против группы
Поведение MySQL Select Distinct, унаследованное от Group By. Если вы используете предложение Group By без какой-либо функции агрегирования, оно действует как ключевое слово Distinct. И единственная разница между ними:
- Группировать по сначала отсортируйте данные, а затем выполните группировку.
- Особое ключевое слово не выполняет никакой сортировки.
Если вы используете Distinct Keyword вместе с Order By then, это даст тот же результат, что и Group By.Следующая инструкция возвращает значения особой профессии из сведений о клиенте
.- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ ОТЛИЧНУЮ профессию ОТ КЛИЕНТА;
Позвольте мне удалить особое ключевое слово и использовать предложение Group By:
- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ профессию ОТ клиентадетали ГРУППА ПО ПРОФЕССИЯМ;
Как видите, они возвращают тот же результат, но не в том же порядке
На этот раз я использую Distinct Keyword вместе с Order By
- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ ОТЛИЧНУЮ профессию ОТ клиентадетали ЗАКАЗ ПО профессии ASC;
Как видите, он возвращает тот же результат, что и Group By
MySQL Выбор отдельной командной строки, пример
Позвольте мне показать вам, как выбирать уникальные записи с помощью командной строки.Здесь мы выбираем отдельные записи об образовании и профессии из столбца сведений о клиенте с помощью select особого
- Пример MySQL SELECT DISTINCT Компания USE; ВЫБЕРИТЕ РАЗЛИЧНОЕ образование, профессию ОТ клиентадетали ЗАКАЗАТЬ ПО ОБРАЗОВАНИЮ ASC, Профессии ASC;
DISTINCT SQL Tutorial для получения уникальных записей из таблиц
ВЫБРАТЬ ОТЛИЧНЫЙ класс ИЗ ученика
Команда DISTINCT в SQL собирает уникальные или отдельные записи из поля
стола.В таблице учеников нас интересует, сколько классов
записи есть, и команда DISTINCT sql должна возвращать класс только один раз. Так
если пятый класс встречается десять раз, он должен вернуться один раз, а если шестой класс — один
запись есть, тогда шестой класс должен возвращаться один раз.Найдите повторяющиеся записи с помощью запроса GROUP BY
Как удалить повторяющиеся записи
Есть еще одна связанная команда sql group, с помощью которой группируются данные и выводятся уникальные имена.Эта группа по командам обычно используется вместе с командами счетчик, среднее, минимум, максимум. Здесь мы обсудим только команду sql independentКоманда DISTINCT вернет записи только один раз.
Это наша таблица, и мы применим к ней команду DISTINCT.
Здесь снова команда DISTINCT в SQL SELECT DISTINCT class FROM student
Вывод отображается здесь Как видите, возвращаются только две строки, и они являются отдельным классом в таблице.Подсчет количества отдельных записей
ВЫБРАТЬ СЧЕТЧИК (ОТЛИЧНЫЙ класс) ОТ ученикаВыход 7
Запрос количества MySQL
DISTINCT запрос, использующий более одного столбца таблицы
Теперь отдельный запрос можно применять с использованием двух столбцов.Мы знаем, что в каждом классе есть два типа учеников (мужской и женский). Таким образом, каждый класс будет возвращен дважды: один раз с полом, равным мужчине, а другой — с полом, равным женщине. Вот запрос. ВЫБЕРИТЕ особый класс, пол ОТ `студент`
Чтобы сделать список легко читаемым, мы будем добавлять к нему порядок по запросу, чтобы мы могли перечислять каждый класс один за другим. ВЫБРАТЬ особый класс, пол ОТ `ученица` упорядочить по классам
Вот пример вывода, вы получите более подробный вывод при использовании sql-дампа таблицы студентов, приведенной в конце этой страницы.класс | пол | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Четыре | женщин | ||||||||||||||||||||||||||||||||||||||||||||||||||
Четыре | мужчин | ||||||||||||||||||||||||||||||||||||||||||||||||||
Три | женщин | ||||||||||||||||||||||||||||||||||||||||||||||||||
мужчин | 904 нагрузки этого мужчины 904 904 стол
заказчик
| продажа
Выход здесь.
Эта статья написана plus2net. |