Select distinct sql: Оператор SQL DISTINCT: примеры, синтаксис

Содержание

Оператор SQL DISTINCT: примеры, синтаксис

Оператор SQL DISTINCT используется для указания на то, что следует работать только с уникальными значениями столбца.

Оператор SQL DISTINCT нашел широкое применение в операторе SQL SELECT, для выборки уникальных значений. Так же используется в агрегатных функциях.

Оператор SQL DISTINCT имеет следующий синтаксис:

SELECT DISTINCT column_name FROM table_name

Примеры оператора SQL DISTINCT. Имеется следующая таблица Artists:

SingerAlbumYearSale
The ProdigyInvaders Must Die20081200000
Drowning PoolSinner2001400000
Massive AttackMezzanine19982300000
The ProdigyFat of the Land1997600000
The ProdigyMusic For The Jilted Generation19941500000
Massive Attack100th Window20031200000
Drowning PoolFull Circle2007800000
Massive AttackDanny The Dog20041900000
Drowning PoolResilience2013500000

Пример 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 из (расширения интеллектуального анализа данных) — SQL Server

  • Чтение занимает 3 мин

В этой статье

Применимо к: SQL Server Службы Analysis Services

Возвращает все возможные состояния выбранного столбца модели. Возвращаемые значения зависят от того, какие значения содержит указанный столбец — дискретные, дискретизированные числовые или непрерывные числовые значения.

Синтаксис

  
SELECT [FLATTENED] DISTINCT [TOP <n>] <expression list> FROM <model>   
[WHERE <condition list>][ORDER BY <expression>]  

Аргументы

n
Необязательный элемент. Целое число, указывающее количество возвращаемых строк.

список выражений
Список связанных идентификаторов столбцов (производных от модели) или выражений.

model
Идентификатор модели.

список условий
Условие ограничения значений, возвращаемых из списка столбцов.

expression
Необязательный элемент. Выражение, возвращающее скалярное значение.

Комментарии

Инструкция SELECT DISTINCT FROM работает только с одним столбцом или с набором связанных столбцов. С набором несвязанных столбцов это предложение не работает.

Инструкция SELECT DISTINCT FROM позволяет напрямую ссылаться на столбец внутри вложенной таблицы. Пример:

<model>.<table column reference>.<column reference>  

Результаты инструкции **SELECT DISTINCT FROM <model> ** могут различаться в зависимости от типа столбца. В следующей таблице описаны поддерживаемые типы столбцов и выводимые инструкцией данные.

Тип столбцаВыходные данные
DiscreteУникальные значения в столбце.
ДискретизированныйСредняя точка каждого дискретного сегмента памяти в столбце.
С задержкойСредняя точка для значений столбца.

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

Следующий пример кода основан на [TM Decision Tree] модели, создаваемой в учебнике по основам интеллектуального анализа данных. Запрос возвращает уникальные значения, существующие в дискретном столбце Gender.

SELECT DISTINCT [Gender]  
FROM [TM Decision Tree]  

Пример результатов:

Для столбцов, содержащих дискретные значения, результаты всегда включают недостающее состояние, показанное как значение NULL.

Пример непрерывного столбца

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

SELECT DISTINCT [Age] AS [Midpoint Age],   
    RangeMin([Age]) AS [Minimum Age],   
    RangeMax([Age]) AS [Maximum Age]  
FROM [TM Decision Tree]  

Пример результатов:

Midpoint AgeMinimum AgeMaximum Age
622697

Кроме того, запрос возвращает одну строку значений NULL, которая представляет отсутствующие значения.

Пример дискретизированного столбца

Следующий образец кода возвращает среднее, максимальное и минимальное значения для каждого сегмента, созданного алгоритмом для столбца [Yearly Income]. Чтобы воспроизвести результаты этого примера, потребуется создать новую структуру интеллектуального анализа данных, аналогичную

[Targeted Mailing]. В мастере измените тип содержимого Yearly Income столбца с непрерывного на Дискретный.

Примечание

Можно также изменить модель интеллектуального анализа данных, созданную в учебнике по основам интеллектуального анализа данных, чтобы дискретизировать столбец структуры интеллектуального анализа данных [Yearly Income]. Сведения о том, как это сделать, см. в разделе изменение дискретизации столбца в модели интеллектуального анализа данных. Однако изменение дискретизации столбца повлечет за собой повторную обработку структуры интеллектуального анализа данных; в итоге изменятся результаты других моделей, построенных с использованием этой структуры.

SELECT DISTINCT [Yearly Income] AS [Bucket Average],   
    RangeMin([Yearly Income]) AS [Bucket Minimum],   
    RangeMax([Yearly Income]) AS [Bucket Maximum]  
FROM [TM Decision Tree]  

Пример результатов:

Bucket AverageBucket MinimumBucket Maximum
24610,71000039221,41
55115,7339221,4171010,05
84821,5471010,0598633,04
111633,998633,04124634,7
147317,4124634,7170000

Видно, что значения столбца [Yearly Income] дискретизированы на пять сегментов. Кроме того, имеется дополнительная строка значений NULL, представляющая недостающие значения.

Количество десятичных разрядов в результатах зависит от клиента, использованного для выполнения запроса. Здесь они были округлены до двух десятичных разрядов, с одной стороны — для простоты, а с другой — чтобы отразить значения, показанные в среде SQL Server Data Tools (SSDT).

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

Возраст >= 69 и годовой доход < 39221,41

Примечание

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

См. также

ВЫБОР ()РАСШИРЕНИЙ ИНТЕЛЛЕКТУАЛЬНОГО АНАЛИЗА ДАННЫХ
Расширения интеллектуального анализа данных (инструкции расширений интеллектуального анализа данных)
Справочник по расширениям интеллектуального анализа данных (расширения интеллектуального анализа данных)

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-Урок 11. Выборка уникальных данных (SELECT DISTINCT)

Оператор SQL DISTINCT используется для указания на то, что следует работать только с уникальными значениями столбца.

Оператор SQL DISTINCT нашел широкое применение в операторе SQL SELECT, для выборки уникальных значений. Так же используется в агрегатных функциях.

Синтаксис

При выборке:

SELECT DISTINCT поле FROM имя_таблицы WHERE условие

При подсчете:

SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие

При суммировании:

SELECT SUM(DISTINCT поле) FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

idnameagesalary
1Дима23400
2Петя25500
3Вася23500
4Коля301000
5Иван27500
6Кирилл281000

Пример 

Давайте выберем все уникальные значения зарплат из таблицы workers:

SELECT DISTINCT salary FROM workers

SQL запрос выберет следующие строки:

Пример 

Давайте подсчитаем все уникальные значения зарплат из таблицы workers (их будет 3 штуки: 400, 500 и 1000):

SELECT COUNT(DISTINCT salary) as count FROM workers

SQL запрос выберет следующие строки:

Пример 

Давайте подсчитаем одновременно все уникальные значения зарплат и уникальные значения возрастов и запишем их в разные поля:

SELECT
	COUNT(DISTINCT salary) as salary_count,
 	COUNT(DISTINCT age) as age_count
FROM workers

SQL запрос выберет следующие строки:

Пример 

Давайте просуммируем все уникальные значения зарплат из таблицы workers:

SELECT SUM(DISTINCT salary) as sum FROM workers

SQL запрос выберет следующие строки:

SQL — ключевое слово Distinct

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

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

Синтаксис

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

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

Примеры

Рассмотрим таблицу клиентов, имеющих следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 34000.00 |
|  5 | Ruslan   |  34 | Omsk      | 45000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Во-первых, давайте посмотрим, как следующий запрос SELECT возвращает повторяющиеся записи заработной платы.

SQL> SELECT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

 

Это произведет следующий результат, где зарплата (34000 и 45000) приходит дважды, дублирует записи из исходной таблицы.

+----------+
| SALARY   |
+----------+
| 21000.00 |
| 55000.00 |
| 34000.00 |
| 34000.00 |
| 45000.00 |
| 45000.00 |
| 10000.00 |
+----------+

Теперь, давайте используем ключевое слово DISTINCT с указанным запросом SELECT, а затем увидим результат.

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

 

Это произведет следующий результат, где у нас нет каких-либо повторяющихся записей.

+----------+
| SALARY   |
+----------+
| 21000.00 |
| 55000.00 |
| 34000.00 |
| 45000.00 |
| 10000.00 |
+----------+

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

ВЫБРАТЬ ОТЛИЧИТЕЛЬНО ОТ (DMX) — SQL Server

  • 3 минуты на чтение

В этой статье

Применимо к: SQL Server Analysis Services

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

Синтаксис

 
ВЫБРАТЬ [ПЛОСКОЕ] ОТЛИЧИТЕЛЬНОЕ [TOP ] <список выражений> ОТ <модель>
[ГДЕ <список условий>] ​​[ЗАКАЗАТЬ ПО <выражению>]
  

Аргументы

n
Дополнительно. Целое число, указывающее, сколько строк нужно вернуть.

список выражений
Список разделенных запятыми идентификаторов связанных столбцов (полученных из модели) или выражений.

модель
Идентификатор модели.

список условий
Условие для ограничения значений, возвращаемых из списка столбцов.

выражение
Необязательно. Выражение, возвращающее скалярное значение.

Замечания

Оператор SELECT DISTINCT FROM работает только с одним столбцом или с набором связанных столбцов. Это предложение не работает с набором несвязанных столбцов.

Оператор SELECT DISTINCT FROM позволяет напрямую ссылаться на столбец внутри вложенной таблицы.Например:

  <модель>. <Ссылка на столбец таблицы>. <Ссылка на столбец>
  

Результаты оператора SELECT DISTINCT FROM <модель> различаются в зависимости от типа столбца. В следующей таблице описаны поддерживаемые типы столбцов и выходные данные оператора.

Тип колонны Выход
Дискретный Уникальные значения в столбце.
Дискретный Средняя точка для каждого дискретизированного сегмента в столбце.
Непрерывный Средняя точка значений в столбце.

Пример дискретной колонны

Следующий пример кода основан на модели [TM Decision Tree] , которую вы создаете в учебном пособии по базовому интеллектуальному анализу данных. Запрос возвращает уникальные значения, которые существуют в дискретном столбце Gender .

  ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ [Пол]
ИЗ [Дерева решений TM]
  

Пример результатов:

Для столбцов, содержащих дискретные значения, результаты всегда включают состояние Отсутствует, показанное как нулевое значение.

Пример непрерывной колонки

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

  ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ [Возраст] КАК [Средний возраст],
    RangeMin ([Возраст]) AS [Минимальный возраст],
    RangeMax ([Возраст]) AS [Максимальный возраст]
ИЗ [Дерева решений TM]
  

Пример результатов:

Средний возраст Минимальный возраст Максимальный возраст
62 26 97

Запрос также возвращает одну строку с нулевыми значениями для представления отсутствующих значений.

Пример дискретной колонки

В следующем примере кода возвращаются средние, максимальные и минимальные значения для каждого сегмента, созданного алгоритмом для столбца [ Годовой доход] . Чтобы воспроизвести результаты для этого примера, вы должны создать новую структуру интеллектуального анализа данных, аналогичную [Targeted Mailing] . В мастере измените тип содержимого столбца Годовой доход с Непрерывный на Дискретный .

Примечание

Вы также можете изменить модель интеллектуального анализа данных, созданную в Базовом руководстве по интеллектуальному анализу данных, чтобы дискретизировать столбец структуры интеллектуального анализа данных, [ Годовой доход] . Дополнительные сведения о том, как это сделать, см. В разделе Изменение дискретности столбца в модели интеллектуального анализа данных. Однако, когда вы изменяете дискретность столбца, это заставляет повторно обрабатывать структуру интеллектуального анализа данных, что изменяет результаты других моделей, которые вы построили с использованием этой структуры.

  ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ [Годовой доход] КАК [Средний период],
    RangeMin ([Годовой доход]) AS [Минимум сегмента],
    RangeMax ([Годовой доход]) AS [Максимум сегмента]
ИЗ [Дерева решений TM]
  

Пример результатов:

Средний ковш Минимум ковша Максимальный ковш
24610.7 10000 39221,41
55115,73 39221,41 71010,05
84821,54 71010,05 98633,04
111633,9 98633,04 124634,7
147317,4 124634,7 170000

Вы можете видеть, что значения столбца [Годовой доход] были дискретизированы на пять сегментов плюс дополнительная строка с нулевыми значениями для представления пропущенных значений.

Количество десятичных знаков в результатах зависит от клиента, который вы используете для запроса. Здесь они были округлены до двух десятичных знаков, как для простоты, так и для отражения значений, отображаемых в SQL Server Data Tools (SSDT).

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

Возраст> = 69 И Годовой доход <39221.41

Примечание

Минимальное значение минимального сегмента и максимальное значение максимального сегмента — это только самые высокие и самые низкие наблюдаемые значения. Предполагается, что любые значения, выходящие за пределы этого наблюдаемого диапазона, относятся к минимальному и максимальному диапазону.

См. Также

SELECT (DMX)
Расширения интеллектуального анализа данных (DMX) Операторы обработки данных
Заявления расширений интеллектуального анализа данных (DMX) Ссылка

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)> 5000;


Предложение 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 ИЗ sto_emp_salary_paid

ЗАКАЗАТЬ ПО emp_name;

ВЫБРАТЬ DISTINCT emp_name, emp_id FROM sto_emp_salary_paid

ORDER BY emp_name;


Результаты для полной таблицы, запросов DISTINCT emp_name и DISTINCT emp_name, emp_id:

SQL SELECT DISTINCT Заявление

Оператор SELECT SQL DISTINCT

Оператор SELECT DISTINCT используется для возврата только различных (разные) ценности.

SELECT DISTINCT удаляет повторяющиеся записи из результатов

SELECT DISTINCT можно использовать с агрегатами: COUNT, AVG, MAX и т. Д.

Операторы SELECT DISTINCT для одного столбца DISTINCT для нескольких столбцов не поддерживаются

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

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

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

Синтаксис

  1. ВЫБРАТЬ РАЗЛИЧНОЕ Имя Emp_Name
  2. ОТ EmployeeDetail;

Пример

Оператор SELECT COUNT DISTINCT

Функция SELECT DISTINCT COUNT () возвращает количество строк, соответствующих заданному критерию

Следующий оператор SQL перечисляет количество различных (DISTINCT) EmployeeDetails EmpId

Синтаксис

  1. ВЫБРАТЬ СЧЕТЧИК (РАЗЛИЧНЫЙ EmpId) ИЗ EmpDetail;
Пример

Оператор SELECT AVG DISTINCT

Функция AVG DISTINCT () возвращает среднее значение числового столбца

Следующий оператор SQL перечисляет количество различных (DISTINCT) EmployeeDetails EmpId

Синтаксис

  1. ВЫБРАТЬ СРЕДНЕЕ (РАЗЛИЧНЫЙ EmpId)
  2. ОТ EmployeeDetail
  3. ГДЕ EmpId = EmpId

Пример

Оператор SELECT MAX DISTINCT

Функция SELECT MAX DISTINCT возвращает наибольшее значение выбранного столбца

Синтаксис

  1. ВЫБРАТЬ МАКС (РАЗЛИЧНЫЙ ИДЕНТИФИКАТОР)
  2. ОТ EmployeeDetail
  3. ГДЕ EmpId = EmpId

Пример

ПРИМЕЧАНИЕ

Этот пример выше не будет работать в Firefox и Microsoft Edge! Поскольку COUNT (DISTINCT column_name) не поддерживается в базах данных доступа Microsoft firefox и

Microsoft Edge использует доступ Microsoft в наших примерах

Вот обходной путь для доступа к ms

SQL SELECT DISTINCT для нескольких столбцов

Вот простой пример для некоторых выбранных столбцов в таблице EmpoyeeDetail, где EmpId = 5

Синтаксис

  1. ВЫБРАТЬ DISTINCT EmpName, EmpAddress, EmpCity FROM EmployeeDetail Где EmpId = 5

Пример

Пример SELECT без DISTINCT

Следующий оператор SQL выбирает все (включая повторяющиеся) значения из столбца EmpName в таблице EmployeeDetail

Синтаксис

  1. ВЫБРАТЬ * ОТ EmployeeDetail

Пример

В этом руководстве мы изучили основы оператора SQL SELECT DISTINCT.

SQL SELECT DISTINCT Заявление

Чайтанья Сингх | Файл: SQL

SELECT DISTINCT Заявление используется для выборки уникальных записей из таблицы. Он возвращает только отдельные значения в результате.

Допустим, у нас есть таблица «Сотрудник», имеющая поле «Отделение сотрудника».Поскольку в каждом отделе может быть несколько сотрудников, это поле таблицы будет иметь повторяющиеся значения. Предположим, мы хотим получить только названия отделов из этой таблицы. В этом случае было бы разумно использовать ключевое слово DISTINCT, так как мы не хотим иметь кучу повторяющихся значений.

Есть несколько случаев, когда ключевое слово DISTINCT может оказаться очень полезным. Давайте посмотрим синтаксис и пример оператора SQL SELECT DISTINCT, чтобы лучше его понять.

SELECT DISTINCT Синтаксис

 ВЫБРАТЬ DISTINCT имя_столбца1, имя_столбца2 ,...
ОТ TableName; 

SELECT DISTINCT, пример

У нас есть таблица STUDENT со следующими записями:

 + --------- + ---------- + ----- + ----------- + --------- - +
| ROLL_NO | ИМЯ | ВОЗРАСТ | ФИЛИАЛ | ГОРОД |
+ --------- + ---------- + ----- + ----------- + ---------- +
| 10001 | Кейт | 22 | CSE | Мумбаи |
| 10002 | Ричард | 21 | ЕЭК | Дели |
| 10003 | Рик | 33 | ME | Ченнаи |
| 10004 | Питер | 26 | CSE | Дели |
| 10005 | Стив | 22 | CSE | Нойда |
| 10006 | Марк | 22 | ЕЭК | Джайпур |
| 10007 | Брэд | 23 | ME | Рампур |
+ --------- + ---------- + ----- + ----------- + ---------- + 

Возьмите уникальные «Ветки» со СТУДЕНЧЕСКОГО стола —

 ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ ФИЛИАЛ ОТ СТУДЕНТА; 

Результат:

 + ---------- +
| ФИЛИАЛ |
+ ---------- +
| CSE |
| ЕЭК |
| ME |
+ ---------- + 

Допустим, вы хотите отсортировать результат.Вы можете сделать это, используя предложение Order by (мы обсуждали предложение ORDER BY в отдельном руководстве) вместе с Distinct —

 ВЫБРАТЬ ОТЛИЧИТЕЛЬНОЕ ОТДЕЛЕНИЕ У СТУДЕНТА
     ЗАКАЗ ПО ОТРАСЛЯМ УДАЛ. 

Результат:

 + ---------- +
| ФИЛИАЛ |
+ ---------- +
| ME |
| ЕЭК |
| CSE |
+ ---------- + 

ВЫБРАТЬ РАЗЛИЧНЫЕ несколько столбцов

В приведенном выше примере мы получили данные только одного столбца из таблицы.Давайте посмотрим, что произойдет, когда мы используем оператор SELECT DISTINCT с несколькими столбцами —

Рассмотрим эту таблицу ЗАКАЗА:

 CUSTOMER_NAME BILL_AMOUNT ORD_NUM
---------- ----------- -------
Рик 2000 1901
Рик 2000 1902
Рик 3000 1903
Рик 3000 1904
Рик 4500 1905
Стив 2000 1906
 

Заявление SQL:

 ВЫБЕРИТЕ DISTINCT CUSTOMER_NAME, BILL_AMOUNT
ОТ ЗАКАЗА; 

Вывод:
Когда мы выбираем несколько столбцов с помощью оператора SELECT DISTINCT, тогда данные этих комбинированных столбцов обрабатываются как отдельное значение.Как вы можете видеть в этом примере, строки Rick 2000 и Rick 3000 несколько раз присутствовали в таблице ORDER, поэтому, когда мы DISTINCT выбираем эти строки на основе этих столбцов, мы получили эти строки только один раз в выводе.

 CUSTOMER_NAME BILL_AMOUNT
---------- -----------
Рик 2000
Рик 3000
Рик 4500
Стив 2000
 

Использование MySQL DISTINCT для исключения дубликатов

Резюме : в этом руководстве вы узнаете, как использовать предложение MySQL DISTINCT в операторе SELECT для устранения повторяющихся строк в наборе результатов.

Введение в MySQL

DISTINCT clause

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

Вот синтаксис предложения DISTINCT :

 

SELECT DISTINCT select_list ИЗ table_name;

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

MySQL

DISTINCT Примеры

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

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

 

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

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

Попробовать

Как ясно видно из выходных данных, у некоторых сотрудников одинаковая фамилия, например Bondur, Firrelli .

Этот оператор использует предложение 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 для выбора уникальных состояний клиентов из таблицы клиентов .

 

ВЫБРАТЬ государственный ИЗ клиенты 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 , например, удаление повторяющихся строк и подсчет ненулевых значения.

Было ли это руководство полезным?

Применение 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 дней совершенно бесплатно для ознакомительных целей!

Oracle SELECT DISTINCT на практических примерах

Резюме : в этом руководстве вы узнаете, как использовать оператор Oracle SELECT DISTINCT для запроса отдельных данных из таблиц.

Введение в Oracle

Оператор SELECT DISTINCT

Предложение DISTINCT используется в операторе SELECT для фильтрации повторяющихся строк в наборе результатов. Это гарантирует, что возвращаемые строки уникальны для столбца или столбцов, указанных в предложении SELECT .

Ниже показан синтаксис оператора SELECT DISTINCT :

 

SELECT DISTINCT column_1 ИЗ таблицы;

В этом операторе значения в column_1 таблицы сравниваются для определения дубликатов.

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

 

SELECT DISTINCT column_1, столбец_2, column_3 ИЗ table_name;

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

В этом синтаксисе комбинация значений в столбце column_1 , column_2 и column_3 используется для определения уникальности данные.

Предложение DISTINCT можно использовать только в операторе SELECT .

Обратите внимание, что DISTINCT является синонимом UNIQUE , который не является стандартом SQL. Рекомендуется всегда использовать DISTINCT вместо UNIQUE .

Oracle

SELECT DISTINCT Примеры

Давайте рассмотрим несколько примеров использования SELECT DISTINCT , чтобы увидеть, как это работает.

A) Oracle

SELECT DISTINCT , пример одного столбца

См. Таблицу контактов в образце базы данных:

В следующем примере извлекаются все имена контактов:

 

SELECT имя ИЗ контакты СОРТИРОВАТЬ ПО имя;

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

Запрос вернул 319 строк, что указывает на то, что таблица контактов и содержит 319 строк.

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

 

SELECT DISTINCT имя ИЗ контакты СОРТИРОВАТЬ ПО имя;

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

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

B) Oracle

SELECT DISTINCT , пример нескольких столбцов

См. Следующую таблицу order_items :

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

 

SELECT DISTINCT product_id, количество ИЗ ORDER_ITEMS СОРТИРОВАТЬ ПО идантификационный номер продукта;

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

Следующее иллюстрирует результат:

В этом примере оба значения: product_id и количество столбцов используются для оценки уникальности строк в результирующем наборе.

C) Oracle

SELECT DISTINCT и NULL

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

См. Таблицу местоположений в образце базы данных.

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

 

SELECT ОТЛИЧНОЕ состояние ИЗ локации СОРТИРОВАТЬ ПО состояние NULLS FIRST;

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

Результат:

Как видите, возвращается только одно значение NULL.

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

Оставить комментарий

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

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