Оператор 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 из (расширения интеллектуального анализа данных) — 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 Age | Minimum Age | Maximum Age |
---|---|---|
62 | 26 | 97 |
Кроме того, запрос возвращает одну строку значений 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 Average | Bucket Minimum | Bucket Maximum |
---|---|---|
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 |
Видно, что значения столбца [Yearly Income] дискретизированы на пять сегментов. Кроме того, имеется дополнительная строка значений NULL, представляющая недостающие значения.
Количество десятичных разрядов в результатах зависит от клиента, использованного для выполнения запроса. Здесь они были округлены до двух десятичных разрядов, с одной стороны — для простоты, а с другой — чтобы отразить значения, показанные в среде SQL Server Data Tools (SSDT).
К примеру, если при просмотре модели с помощью средства просмотра дерева решений щелкнуть узел, содержащий сгруппированных по показателю дохода клиентов, во всплывающей подсказке отобразятся следующие свойства узла:
Возраст >= 69 и годовой доход < 39221,41
Примечание
Минимальное значение минимального сегмента и максимальное значение максимального сегмента представляют собой самое высокое и самое низкое наблюдаемое значение. Предполагается, что все значения, остающиеся за пределами этого наблюдаемого диапазона, принадлежат минимальному и максимальному сегментам.
См. также
ВЫБОР ()РАСШИРЕНИЙ ИНТЕЛЛЕКТУАЛЬНОГО АНАЛИЗА ДАННЫХ
Расширения интеллектуального анализа данных (инструкции расширений интеллектуального анализа данных)
Справочник по расширениям интеллектуального анализа данных (расширения интеллектуального анализа данных)
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
для разных столбцов в одном запросе. Секция
выполняется до секции 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, если не сказано иное:
id | name | age | salary |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем все уникальные значения зарплат из таблицы 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 для удаления всех повторяющихся записей и выборки только уникальных записей.
Может возникнуть ситуация, когда у вас есть несколько повторяющихся записей в таблице.при извлечении таких записей имеет смысл извлекать только эти уникальные записи, а не извлекать повторяющиеся записи
Столбец внутри таблицы часто содержит много повторяющихся значений, и иногда вы хочу только перечислить разные (разные) значения
Синтаксис
- ВЫБРАТЬ РАЗЛИЧНОЕ Имя Emp_Name
- ОТ EmployeeDetail;
Пример
Оператор SELECT COUNT DISTINCT
Функция SELECT DISTINCT COUNT () возвращает количество строк, соответствующих заданному критерию
Следующий оператор SQL перечисляет количество различных (DISTINCT) EmployeeDetails EmpId
Синтаксис
- ВЫБРАТЬ СЧЕТЧИК (РАЗЛИЧНЫЙ EmpId) ИЗ EmpDetail;
Оператор SELECT AVG DISTINCT
Функция AVG DISTINCT () возвращает среднее значение числового столбца
Следующий оператор SQL перечисляет количество различных (DISTINCT) EmployeeDetails EmpId
Синтаксис
- ВЫБРАТЬ СРЕДНЕЕ (РАЗЛИЧНЫЙ EmpId)
- ОТ EmployeeDetail
- ГДЕ EmpId = EmpId
Пример
Оператор SELECT MAX DISTINCT
Функция SELECT MAX DISTINCT возвращает наибольшее значение выбранного столбца
Синтаксис
- ВЫБРАТЬ МАКС (РАЗЛИЧНЫЙ ИДЕНТИФИКАТОР)
- ОТ EmployeeDetail
- ГДЕ EmpId = EmpId
Пример
ПРИМЕЧАНИЕ
Этот пример выше не будет работать в Firefox и Microsoft Edge! Поскольку COUNT (DISTINCT column_name) не поддерживается в базах данных доступа Microsoft firefox и
Microsoft Edge использует доступ Microsoft в наших примерах
Вот обходной путь для доступа к ms
SQL SELECT DISTINCT для нескольких столбцов
Вот простой пример для некоторых выбранных столбцов в таблице EmpoyeeDetail, где EmpId = 5
Синтаксис
- ВЫБРАТЬ DISTINCT EmpName, EmpAddress, EmpCity FROM EmployeeDetail Где EmpId = 5
Пример
Пример SELECT без DISTINCT
Следующий оператор SQL выбирает все (включая повторяющиеся) значения из столбца EmpName в таблице EmployeeDetail
Синтаксис
- ВЫБРАТЬ * ОТ 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
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT DISTINCT select_list ИЗ table_name;
MySQL
DISTINCT
Примеры Давайте рассмотрим простой пример использования предложения DISTINCT
для выбора уникальных фамилий сотрудников из сотрудников
стол.
Сначала запросите фамилии сотрудников из таблицы employee
, используя следующий оператор SELECT
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT Фамилия ИЗ сотрудники СОРТИРОВАТЬ ПО Фамилия;
Попробовать
Как ясно видно из выходных данных, у некоторых сотрудников одинаковая фамилия, например Bondur,
Firrelli
.
Этот оператор использует предложение 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
для выбора уникальных состояний клиентов из таблицы клиентов
.
Язык кода: 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
, например, удаление повторяющихся строк и подсчет ненулевых значения.
Было ли это руководство полезным?
Применение 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
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT DISTINCT column_1, столбец_2, column_3 ИЗ table_name;
В этом синтаксисе комбинация значений в столбце column_1
, column_2
и column_3
используется для определения уникальности данные.
Предложение DISTINCT
можно использовать только в операторе SELECT
.
Обратите внимание, что DISTINCT
является синонимом UNIQUE
, который не является стандартом SQL. Рекомендуется всегда использовать DISTINCT
вместо UNIQUE
.
Oracle
SELECT DISTINCT
Примеры Давайте рассмотрим несколько примеров использования SELECT DISTINCT
, чтобы увидеть, как это работает.
A) Oracle
SELECT DISTINCT
, пример одного столбца См. Таблицу контактов
в образце базы данных:
В следующем примере извлекаются все имена контактов:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT имя ИЗ контакты СОРТИРОВАТЬ ПО имя;
Запрос вернул 319 строк, что указывает на то, что таблица контактов и
содержит 319 строк.
Чтобы получить уникальные имена контактов, добавьте ключевое слово DISTINCT
в приведенный выше оператор SELECT
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT DISTINCT имя ИЗ контакты СОРТИРОВАТЬ ПО имя;
Теперь в результирующем наборе 302 строки, что означает, что 17 повторяющихся строк были удалены.
B) Oracle
SELECT DISTINCT
, пример нескольких столбцов См. Следующую таблицу order_items
:
Следующий оператор выбирает отдельный идентификатор продукта и количество из таблицы order_items
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT DISTINCT product_id, количество ИЗ ORDER_ITEMS СОРТИРОВАТЬ ПО идантификационный номер продукта;
Следующее иллюстрирует результат:
В этом примере оба значения: product_id
и количество столбцов
используются для оценки уникальности строк в результирующем наборе.
C) Oracle
SELECT DISTINCT
и NULL DISTINCT
обрабатывает значения NULL как дубликаты друг друга. Если вы используете оператор SELECT DISTINCT
для запроса данных из столбца, который имеет много значений NULL, набор результатов будет включать только одно значение NULL.
См. Таблицу местоположений
в образце базы данных.
Следующий оператор извлекает данные из столбца состояния, который имеет много значений NULL:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT ОТЛИЧНОЕ состояние ИЗ локации СОРТИРОВАТЬ ПО состояние NULLS FIRST;
Результат:
Как видите, возвращается только одно значение NULL.
Обратите внимание, что если вы хотите применить DISTINCT
к некоторым столбцам, пропуская другие столбцы, вместо этого следует использовать предложение GROUP BY
.