Select distinct: SQL SELECT DISTINCT Statement

Содержание

Оператор 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 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server Службы Analysis ServicesAnalysis ServicesSQL ServerSQL Server Службы Analysis ServicesAnalysis Services

Применимо к:Applies to: SQL ServerSQL Server Службы Analysis ServicesAnalysis ServicesSQL ServerSQL Server Службы Analysis ServicesAnalysis Services

Возвращает все возможные состояния выбранного столбца модели. Returns all possible states for the selected column in the model. Возвращаемые значения зависят от того, какие значения содержит указанный столбец — дискретные, дискретизированные числовые или непрерывные числовые значения.The values that are returned vary depending on whether the specified column contains discrete values, discretized numeric values, or continuous numeric values.

СинтаксисSyntax

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

АргументыArguments

nn
Необязательный элемент.Optional. Целое число, указывающее количество возвращаемых строк.An integer specifying how many rows to return.

список выраженийexpression list
Список связанных идентификаторов столбцов (производных от модели) или выражений.A comma-separated list of related column identifiers (derived from the model) or expressions.

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

список условийcondition list
Условие ограничения значений, возвращаемых из списка столбцов.A condition to restrict the values that are returned from the column list.

expressionexpression
Необязательный элемент.Optional. Выражение, возвращающее скалярное значение.An expression that returns a scalar value.

КомментарииRemarks

Инструкция SELECT DISTINCT FROM работает только с одним столбцом или с набором связанных столбцов.The SELECT DISTINCT FROM statement only works with a single column or with a set of related columns. С набором несвязанных столбцов это предложение не работает.This clause does not work with a set of unrelated columns.

Инструкция SELECT DISTINCT FROM позволяет напрямую ссылаться на столбец внутри вложенной таблицы.The SELECT DISTINCT FROM statement allows you to directly reference a column inside of a nested table.

Пример:For example:

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

Результаты инструкции **SELECT DISTINCT FROM <model> ** могут различаться в зависимости от типа столбца.The results of the SELECT DISTINCT FROM <model> statement vary, depending on the column type. В следующей таблице описаны поддерживаемые типы столбцов и выводимые инструкцией данные.The following table describes the supported column types and the output from the statement.

Тип столбцаColumn type Выходные данныеOutput
DiscreteDiscrete Уникальные значения в столбце.The unique values in the column.
ДискретизированныйDiscretized Средняя точка каждого дискретного сегмента памяти в столбце.The midpoint for each discretized bucket in the column.
С задержкойContinuous Средняя точка для значений столбца.The midpoint for the values in the column.

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

Следующий пример кода основан на [TM Decision Tree] модели, создаваемой в учебнике по основам интеллектуального анализа данных.The following code sample is based on the [TM Decision Tree] model that you create in the Basic Data Mining Tutorial. Запрос возвращает уникальные значения, существующие в дискретном столбце Gender.The query returns the unique values that exist in the discrete column, Gender.

SELECT DISTINCT [Gender]  
FROM [TM Decision Tree]  

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

Для столбцов, содержащих дискретные значения, результаты всегда включают недостающее состояние, показанное как значение NULL.For columns that contain discrete values, the results always include the Missing state, shown as a null value.

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

Следующий образец кода возвращает средний, минимальный и максимальный возраст для всех значений столбца. The following code sample returns the midpoint, minimum age, and maximum age for all of the values in the column.

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

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

Midpoint AgeMidpoint Age Minimum AgeMinimum Age Maximum AgeMaximum Age
6262 2626 9797

Кроме того, запрос возвращает одну строку значений NULL, которая представляет отсутствующие значения.The query also returns a single row of null values, to represent missing values.

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

Следующий образец кода возвращает среднее, максимальное и минимальное значения для каждого сегмента, созданного алгоритмом для столбца [Yearly Income].The following code sample returns the midpoint, maximum, and minimum values for each bucket that has been created by the algorithm for the column, [Yearly Income].

Чтобы воспроизвести результаты этого примера, потребуется создать новую структуру интеллектуального анализа данных, аналогичную [Targeted Mailing].To reproduce the results for this example, you must create a new mining structure that is the same as [Targeted Mailing]. В мастере измените тип содержимого Yearly Income столбца с непрерывного на Дискретный.In the wizard, change the content type of the Yearly Income column from Continuous to Discretized.

Примечание

Можно также изменить модель интеллектуального анализа данных, созданную в учебнике по основам интеллектуального анализа данных, чтобы дискретизировать столбец структуры интеллектуального анализа данных [Yearly Income].You can also change the mining model created in the Basic Mining Tutorial to discretize the mining structure column, [

Yearly Income]. Сведения о том, как это сделать, см. в разделе изменение дискретизации столбца в модели интеллектуального анализа данных.For information about how to do this, see Change the Discretization of a Column in a Mining Model. Однако изменение дискретизации столбца повлечет за собой повторную обработку структуры интеллектуального анализа данных; в итоге изменятся результаты других моделей, построенных с использованием этой структуры.However, when you change the discretization of the column, it will force the mining structure to be reprocessed, which will change the results of other models that you have built using that structure.

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

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

Bucket AverageBucket Average Bucket MinimumBucket Minimum Bucket MaximumBucket Maximum
24610,724610. 7 1000010000 39221,4139221.41
55115,7355115.73 39221,4139221.41 71010,0571010.05
84821,5484821.54 71010,0571010.05 98633,0498633.04
111633,9111633.9 98633,0498633.04 124634,7124634.7
147317,4147317.4 124634,7124634.7 170000170000

Видно, что значения столбца [Yearly Income] дискретизированы на пять сегментов. Кроме того, имеется дополнительная строка значений NULL, представляющая недостающие значения.You can see that the values of the [Yearly Income] column have been discretized into five buckets, plus an additional row of null values, to represent missing values.

Количество десятичных разрядов в результатах зависит от клиента, использованного для выполнения запроса.The number of decimal places in the results depends on the client that you use for querying. Здесь они были округлены до двух десятичных разрядов, с одной стороны — для простоты, а с другой — чтобы отразить значения, показанные в среде SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT). Here they have been rounded to two decimal places, both for simplicity and to reflect the values that are displayed in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).

К примеру, если при просмотре модели с помощью средства просмотра дерева решений щелкнуть узел, содержащий сгруппированных по показателю дохода клиентов, во всплывающей подсказке отобразятся следующие свойства узла:For example, if you browse the model by using the Decision Tree viewer and click a node that contains customers grouped by income, the following node properties are displayed in the Tooltip:

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

Примечание

Минимальное значение минимального сегмента и максимальное значение максимального сегмента представляют собой самое высокое и самое низкое наблюдаемое значение.The minimum value of the minimum bucket and the maximum value of the maximum bucket are just the highest and lowest observed values. Предполагается, что все значения, остающиеся за пределами этого наблюдаемого диапазона, принадлежат минимальному и максимальному сегментам.Any values that fall outside this observed range are assumed to belong to the minimum and maximum buckets.

См. такжеSee Also

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

SAPLand — Мир решений SAP

SELECT … FOR ALL ENTRIES …фильтрует результат, полученный от базы данных, по уникальности значений полей, то есть работает, как если бы была послана команда SELECT DISTINCT… .

Мой друг Александр Коновалов предложил мне обратить внимание абапствующей общественности на тот, к сожалению, малоизвестный факт, что команда
SELECTFOR ALL ENTRIES
фильтрует результат, полученный от базы данных, по уникальности значений полей, то есть работает, как если бы была послана команда
SELECT DISTINCT… .

Для демонстрации этого факта напишем программу:

* 005.Select…FOR ALL ENTRIES == Select DISTINCT
REPORT  ZQK005.
parameters dummy.
data
: begin     of gs_task
,   cityfrom type spfli-cityfrom
,   cityto   type spfli-cityto
, end       of gs_task
, gs_res  type spfli
, gt_task like standard table of gs_task
, gt_res  like standard table of gs_res
.
start-of-selection.
  gs_task-cityfrom = ‘FRANKFURT’.
  gs_task-cityto   = ‘NEW YORK’.
  append gs_task to gt_task.
  select connid carrid cityfrom cityto «======== +CONNID
         from spfli bypassing buffer
         into corresponding fields of table gt_res
         for all entries in gt_task
         where cityfrom = gt_task-cityfrom
           and cityto   = gt_task-cityto.
  perform gulchatay_otkroy_lichiko.
  select carrid cityfrom cityto        «======== -CONNID
         from spfli bypassing buffer
        

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

Зарегистрироваться

У вас уже есть учетная запись?

Войти

Разница между Select Unique и Select Distinct

Я думал, что они являются автономными, но я написал следующее в Microsoft SQL:

Select Unique col from 
     (select col from table1 union select col from table2) alias

И это не удалось. Изменение его на

Select Distinct col from 
     (select col from table1 union select col from table2) alias

зафиксировал его. Может кто-нибудь объяснить?

Ответ 1

SELECT UNIQUE — это старый синтаксис, поддерживаемый Oracle-кодом SQL. Это синоним SELECT DISTINCT.

Используйте SELECT DISTINCT, потому что это стандартный SQL, а SELECT UNIQUE является нестандартным, а в других марках баз данных, отличных от Oracle, SELECT UNIQUE может вообще не распознаваться.

Ответ 2

Уникальное — это ключевое слово, используемое в директиве Create Table() для обозначения того, что поле будет содержать уникальные данные, обычно используемые для естественных ключей, внешних ключей и т.д.

Например:

Create Table Employee(   
    Emp_PKey Int Identity(1, 1) Constraint PK_Employee_Emp_PKey Primary Key,  
    Emp_SSN Numeric Not Null Unique,  
    Emp_FName varchar(16),   
    Emp_LName varchar(16) 
)

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

Distinct используется в инструкции Select для уведомления запроса, в котором вам нужны только уникальные элементы, возвращаемые, когда поле содержит данные, которые могут быть не уникальными.

Select Distinct Emp_LName
From Employee

У вас может быть много сотрудников с одинаковой фамилией, но вам нужно только каждое другое имя.

Очевидно, что если запрашиваемое поле содержит уникальные данные, ключевое слово Distinct становится лишним.

Ответ 3

выберите уникальный недопустимый синтаксис для того, что вы пытаетесь сделать

вы хотите использовать либо выделение, либо выбрать отличительный символ

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

указанный ниже запрос сам по себе будет предоставлять только определенные значения

select col from table1 
union 
select col from table2

если вам нужны дубликаты, которые вам нужно будет делать

select col from table1 
union all
select col from table2
Ответ 5

Только в Oracle = >

SELECT DISTINCT и SELECT UNIQUE ведут себя одинаково. Хотя DISTINCT является стандартом ANSI SQL, UNIQUE является специфическим для Oracle выражением.

В других базах данных (например, sql-server в вашем случае) = >

SELECT UNIQUE является недопустимым синтаксисом. UNIQUE — ключевое слово для добавления уникального ограничения для столбца.

SELECT DISTINCT

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

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

В этой статье

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

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

Синтаксис

 
SELECT [FLATTENED] DISTINCT [TOP ] <список выражений> FROM 
[ГДЕ <список условий>] ​​[ЗАКАЗАТЬ ПО <выражению>]
  

Аргументы

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

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

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

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

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

Замечания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

  ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ [Годовой доход] КАК [Средний период],
    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) Ссылка

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

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

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

ROW_NUMBER () — это оконная функция, которая присваивает последовательное целое число каждой строке в разделе набора результатов, начиная с 1 для первой строки в каждом разделе. В случае электронных писем клиентов первое письмо возвращает 1, второе — 2 и т. Д. Затем мы можем использовать это значение (обозначенное ниже как «rn»), чтобы выбрать только первое электронное письмо для каждого клиента.

Следует отметить, что не все реляционные базы данных поддерживают оконные функции. 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;

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

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

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

Oracle

SELECT DISTINCT Примеры

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

A) Oracle

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

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

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

 

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

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

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

 

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

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

B) Oracle

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

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

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

 

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

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

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

C) Oracle

SELECT DISTINCT и NULL

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

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

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

 

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

Результат:

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

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

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

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

SQL DISTINCT | Средний уровень SQL

Начиная с этого места? Этот урок является частью полного руководства по использованию SQL для анализа данных.Проверьте начало.

В этом уроке мы рассмотрим:

Использование SQL DISTINCT для просмотра уникальных значений

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

  ВЫБЕРИТЕ РАЗЛИЧНЫЙ месяц
  ИЗ tutorial. aapl_historical_stock_price
  

Если вы включите два (или более) столбца в предложение SELECT DISTINCT , ваши результаты будут содержать все уникальные пары этих двух столбцов:

  ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ год, месяц
  ИЗ учебника.aapl_historical_stock_price
  

Примечание. Вам нужно включить DISTINCT только один раз в предложение SELECT — вам не нужно добавлять его для каждого имени столбца.

Практическая задача

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

Попробуй это Посмотреть ответ

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

Использование DISTINCT в агрегатах

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

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

  ВЫБРАТЬ СЧЕТЧИК (РАЗЛИЧНЫЙ месяц) КАК unique_months
  ИЗ tutorial.aapl_historical_stock_price
  

Результаты показывают, что существует 12 уникальных значений (другие примеры могут быть менее очевидными). Это достаточно небольшое число, которое вы могли бы суммировать по месяцам и довольно рано интерпретировать результаты. Например, вы можете проследить это, взяв средние объемы сделок по месяцам, чтобы понять, когда акции Apple действительно движутся:

  ВЫБРАТЬ месяц,
       AVG (объем) AS avg_trade_volume
  ИЗ учебника. aapl_historical_stock_price
 ГРУППА ПО МЕСЯЦАМ
 ЗАКАЗАТЬ ПО 2 DESC
  

Хорошо, вернемся к DISTINCT . Вы заметите, что DISTINCT находится внутри агрегатной функции, а не в начале предложения SELECT . Конечно, вы можете SUM или AVG отдельные значения в столбце, но для них меньше практических приложений. Для MAX и MIN вам, вероятно, никогда не следует использовать DISTINCT , потому что результаты будут такими же, как и без DISTINCT , а функция DISTINCT значительно замедлит возврат результатов по вашему запросу.

DISTINCT производительность

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

Отточите свои навыки работы с SQL

Практическая задача

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

Попробуй это Посмотреть ответ

Практическая задача

Напишите запрос, который отдельно подсчитывает количество уникальных значений в столбце месяц и и количество уникальных значений в столбце «год».

Попробуй это Посмотреть ответ

SQLite SELECT DISTINCT — Удаление дубликатов в наборе результатов

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

Введение в SQLite

Предложение SELECT DISTINCT

Предложение DISTINCT является необязательным предложением оператора SELECT . Предложение DISTINCT позволяет удалить повторяющиеся строки в наборе результатов.

Следующий оператор иллюстрирует синтаксис предложения DISTINCT :

 

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

В этом синтаксисе:

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

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

В теории базы данных, если столбец содержит NULL значений, это означает, что у нас нет информации об этом столбце конкретных записей или информация неприменима.

Например, если у клиента есть номер телефона со значением NULL , это означает, что у нас нет информации о номере телефона клиента на момент записи информации о клиенте, или у клиента может не быть номера телефона. вообще.

SQLite

SELECT DISTINCT Примеры

Мы будем использовать таблицу клиентов в образце базы данных для демонстрации.

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

 

SELECT city ОТ клиентов ЗАКАЗАТЬ ПО городу;

Попробовать

Возвращает 59 строк.Есть несколько повторяющихся строк, таких как Berlin London и Mountain View Чтобы удалить эти повторяющиеся строки, вы используете предложение DISTINCT следующим образом:

 

SELECT DISTINCT city ОТ клиентов ЗАКАЗАТЬ ПО городу;

Попробовать

Он возвращает 53 строки, так как предложение DISTINCT удалило 6 повторяющихся строк.

SQLite

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

Следующая инструкция находит города и страны всех клиентов.

 

ВЫБРАТЬ Город, страна ИЗ клиенты СОРТИРОВАТЬ ПО страна;

Попробовать

Набор результатов содержит повторяющиеся город и страну, например, Сан-Паулу в Бразилии, как показано на скриншоте выше.

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

 

SELECT DISTINCT Город, страна ИЗ клиенты СОРТИРОВАТЬ ПО страна;

Вот частичный результат:

Как упоминалось ранее, SQLite использует комбинацию города и страны для оценки дубликата.

SQLite

SELECT DISTINCT с NULL , пример

Этот оператор возвращает названия компаний клиентов из таблицы клиентов .

 

SELECT компания ОТ клиентов;

Попробовать

Он возвращает 59 строк со многими значениями NULL .

Теперь, если вы примените к оператору предложение DISTINCT , он сохранит только одну строку со значением NULL .

См. Следующее заявление:

 

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

Попробовать

Оператор возвращает 11 строк с одним значением NULL .

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

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

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

Оператор SQL SELECT DISTINCT

Оператор SELECT SQL DISTINCT

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

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

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

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

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

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

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

Синтаксис

  1. SELECT DISTINCT Emp_Name
  2. FROM EmployeeDetail;

Пример

Оператор SELECT COUNT DISTINCT

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

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

Синтаксис

  1. ВЫБРАТЬ СЧЕТ (DISTINCT EmpId) FROM EmpDetail;
Пример

Оператор SELECT AVG DISTINCT

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

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

Синтаксис

  1. SELECT AVG (DISTINCT EmpId)
  2. FROM EmployeeDetail
  3. WHERE EmpId = EmpId

Пример

Оператор SELECT MAX DISTINCT

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

Синтаксис

  1. SELECT MAX (DISTINCT EmpId)
  2. FROM EmployeeDetail
  3. EmpId
  4. WHERE EmpId = 90

    Пример

    ПРИМЕЧАНИЕ

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

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

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

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

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

    Синтаксис

    1. SELECT DISTINCT EmpName, EmpAddress, EmpCity FROM EmployeeDetail Где EmpId = 5

    Пример

    Пример SELECT без DISTINCT

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

    Синтаксис

    1. SELECT * FROM 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, тогда данные этих комбинированных столбцов обрабатываются как отдельное значение.

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

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