Содержание

Как применять 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
FROM tables
[WHERE conditions];

Параметры или аргументы

expressions — столбцы или вычисления, которые вы хотите получить.
tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.

WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.

Примечание

  • Когда в DISTINCT предусмотрено только одно expressions, запрос возвращает уникальные значения для этого expressions.
  • Если в DISTINCT представлено более одного expressions, запрос будет получать уникальные комбинации для указанных expressions.
  • В MySQL оператор DISTINCT не игнорирует значения NULL. Поэтому при использовании DISTINCT в вашем SQL-предложении ваш результирующий набор будет включать NULL в качестве отдельного значения.

Пример с одним столбцом

Рассмотрим простейший пример 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 обрабатывается, значения выражений SELECT производят запись ( A, B), которая уже находится в результирующем наборе. Из-за

DISTINCT он отброшен. Строка #3 производит ( X, Y), которая также помещается в результирующий набор. Затем предложение ORDER BY column3 сортирует записи в результирующем наборе следующим образом ( A , B ), ( X , Y ).

Но если строка #2 обрабатывается до строки #1, то, следуя той же логике, изложенной в предыдущем абзаце, записи в результирующем наборе сортируются следующим образом:( X , 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

  1. Справка по SQL
  2. Выражения
  3. 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 :

 

SELECT DISTINCT select_list ИЗ table_name;

Язык кода: SQL (язык структурированных запросов) (sql)

MySQL

DISTINCT примеры

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

Сначала запросите фамилии сотрудников из таблицы сотрудников , используя следующий оператор SELECT :

 

SELECT фамилия ИЗ сотрудники СОРТИРОВАТЬ ПО фамилия;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Как ясно видно из выходных данных, у некоторых сотрудников одинаковая фамилия e.г, Бондур, Фиррелли .

Этот оператор использует предложение DISTINCT для выбора уникальных фамилий из таблицы сотрудников :

 

SELECT ОТЛИЧИТЕЛЬНАЯ фамилия ИЗ сотрудники СОРТИРОВАТЬ ПО фамилия;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать


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

MySQL

DISTINCT и NULL значения

Если столбец имеет NULL значений и вы используете предложение DISTINCT для этого столбца, MySQL сохраняет только одно значение NULL , потому что DISTINCT обрабатывает все значения NULL как то же значение.

Например, в таблице клиентов у нас есть много строк, у которых state столбец имеет NULL значений.

Когда вы используете предложение DISTINCT для запроса состояний клиентов, вы увидите уникальные состояния и NULL в виде следующего запроса:

 

SELECT DISTINCT state ОТ клиентов;

Попробовать

MySQL

DISTINCT с несколькими столбцами

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

Например, чтобы получить уникальную комбинацию города и штата из таблицы клиентов , вы используете следующий запрос:

 

SELECT DISTINCT город-государство ИЗ клиенты КУДА состояние НЕ ПУСТО СОРТИРОВАТЬ ПО государственный, город;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Без предложения DISTINCT вы получите повторяющуюся комбинацию штата и города следующим образом:

 

SELECT город-государство ИЗ клиенты КУДА состояние НЕ ПУСТО СОРТИРОВАТЬ ПО государственный , город;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Предложение DISTINCT vs. Предложение GROUP BY

Если вы используете предложение GROUP BY в операторе SELECT без использования агрегатных функций, предложение GROUP BY ведет себя так же, как предложение DISTINCT .

Следующий оператор использует предложение GROUP BY для выбора уникальных состояний клиентов из таблицы customers .

 

ВЫБРАТЬ государственный ИЗ клиенты GROUP BY состояние;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Вы можете получить аналогичный результат, используя предложение DISTINCT :

 

SELECT DISTINCT государственный ИЗ клиенты;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

Вообще говоря, предложение 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., вы используете следующий запрос:

 

SELECT COUNT (DISTINCT state) ИЗ клиенты КУДА country = 'США';

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

MySQL

DISTINCT с предложением LIMIT

Если вы используете предложение DISTINCT с предложением LIMIT , MySQL немедленно прекращает поиск, когда находит количество уникальных строк, указанное в предложении LIMIT .

Следующий запрос выбирает первые пять непустых уникальных состояний в таблице клиентов .

 

ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ государственный ИЗ клиенты КУДА состояние НЕ ПУСТО LIMIT 5;

Язык кода: SQL (язык структурированных запросов) (sql)

Попробовать

В этом руководстве мы показали вам различные способы использования предложения 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 стол

Отчетливые записи, связывающие две таблицы.

Мы создадим две таблицы. Один — это данные о наших клиентах, а другой — сведения о продажах. Один и тот же покупатель может купить более одного раза, поэтому в нашей таблице продаж будет несколько записей для покупателя.

Мы постараемся узнать имя покупателя, который приобрел какой-либо товар. Мы получим отдельный идентификатор клиента из таблицы продаж, а затем свяжем его, чтобы получить имя клиента из таблицы клиентов. Вот наши две таблицы.

класс пол
Четыре женщин
Четыре мужчин
Три женщин
мужчин
заказчик
c_id имя
1 alex B
2 Rohn C
3 Ravi J 4 904
Ravi J 4 904 Раджу К
6 Рой К
продажа 9019 904 CD 904 904
sale_id c_id продукт цена
1 2 книга 40
2 2 Книжка 50
4 3 Ручка 20
5 4 Сумка 30
3
Вот наш запрос
  SELECT DISTINCT продажа.c_id, имя ОТ `sale`, покупатель ГДЕ sale.c_id = customer.c_id  
Выход здесь. 904 и не присутствует в другой таблице. Как определить клиентов, которые не совершили покупку или чей id не отображается в таблице продаж?

Для этого мы должны использовать запрос left Join

PHP-скрипт для использования Distinct SQL

Пример кода с использованием отдельного запроса с использованием сценария PHP и PDO.
  ";
echo "
"; foreach ($ dbo-> query ($ count) as $ row) { echo ""; } эхо "
c_id имя
2 Rohn c
1 alex B
3 Ravi J 4
Ravi J 4
класс секс
$ row [class] $ row [sex]
"; ?>

Эта статья написана plus2net.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *