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

Как вывести уникальные значения sql

  • автор:

Уникальные записи – SELECT DISTINCT

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

Приступая к изучению данного материала, рекомендуется ознакомиться с описанием учебной БД.

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

Избавиться от дубликатов можно, добавив в запрос ключевое слово DISTINCT. Оно указывается в предложении SELECT, сразу после ключевого слова SELECT:

SELECT DISTINCT FROM

Выбрать уникальные имена всех сотрудников.

-- Выполняем запрос в контексте учебной базы USE CallCenter SELECT DISTINCT Имя FROM Сотрудники

Общее количество записей в таблице сотрудников составляет 39, но приведенный SQL-код выгрузил 34 строки. 5-ть повторяющихся имен были удалены из результата.

Дополним синтаксис оператора SELECT, описанный в предыдущем уроке, новым ключевым словом:

SELECT [DISTINCT] [Имя_таблицы.]Имя_столбца[, [Имя_таблицы.]Имя_столбца2 …] FROM [[Имя_базы_данных.]Имя_Схемы.]Имя_таблицы
  • Объединение таблиц – UNION
  • Соединение таблиц – операция JOIN и ее виды
  • Тест на знание основ SQL

Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.

Секция DISTINCT

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

Вы можете указать столбцы, по которым хотите отбирать уникальные значения: SELECT DISTINCT ON (column1, column2. ) . Если столбцы не указаны, то отбираются строки, в которых значения уникальны во всех столбцах.

┌─a─┬─b─┬─c─┐ │ 1 │ 1 │ 1 │ │ 1 │ 1 │ 1 │ │ 2 │ 2 │ 2 │ │ 2 │ 2 │ 2 │ │ 1 │ 1 │ 2 │ │ 1 │ 2 │ 2 │ └───┴───┴───┘ 

Использование DISTINCT без указания столбцов:

SELECT DISTINCT * FROM t1; 
┌─a─┬─b─┬─c─┐ │ 1 │ 1 │ 1 │ │ 2 │ 2 │ 2 │ │ 1 │ 1 │ 2 │ │ 1 │ 2 │ 2 │ └───┴───┴───┘ 

Использование DISTINCT с указанием столбцов:

SELECT DISTINCT ON (a,b) * FROM t1; 
┌─a─┬─b─┬─c─┐ │ 1 │ 1 │ 1 │ │ 2 │ 2 │ 2 │ │ 1 │ 2 │ 2 │ └───┴───┴───┘ 

DISTINCT и ORDER BY​

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 был разрезан перед сортировкой.

Учитывайте эту специфику при разработке запросов.

Обработка NULL​

DISTINCT работает с NULL как-будто NULL — обычное значение и NULL==NULL . Другими словами, в результате DISTINCT , различные комбинации с NULL встретятся только один раз. Это отличается от обработки NULL в большинстве других контекстов.

Альтернативы​

Можно получить такой же результат, применив GROUP BY для того же набора значений, которые указан в секции SELECT , без использования каких-либо агрегатных функций. Но есть несколько отличий от GROUP BY :

  • DISTINCT может применяться вместе с GROUP BY .
  • Когда секция ORDER BY опущена, а секция LIMIT присутствует, запрос прекращает выполнение сразу после считывания необходимого количества различных строк.
  • Блоки данных выводятся по мере их обработки, не дожидаясь завершения выполнения всего запроса.

Получение уникальных значений SQL-выборки

Как сделать следующее — Сделал я запрос на выборку. Отобразились данные, но к примеру в столбце ‘1’ — 10 одинаковых значений. То есть вывод у меня будет такой Столбец 1 f f f и т.д Как вывести только 1 f, а если к примеру появилось значение a в этом же столбце — отобразить и его.

Отслеживать
19.5k 29 29 золотых знаков 47 47 серебряных знаков 139 139 бронзовых знаков
задан 10 июн 2014 в 17:30
RattleSneyk RattleSneyk
339 1 1 золотой знак 7 7 серебряных знаков 23 23 бронзовых знака

Чтобы выбрать уникальные значения, надо использовать оператор DISTINCT: SELECT DISTINCT name FROM users

10 июн 2014 в 17:35
@Fike, сделайте ваш комментарий ответом
10 июн 2014 в 18:03

@mountpoint, автор еще не подтвердил, что это именно то, что ему нужно, и у меня есть представление, что хороший ответ должен подробно объяснять, что творится в коде (как на SO)(а мне всегда лень) я против ничего не имею, но не думаю, что это нужно

10 июн 2014 в 18:11

@Fike, я думаю, что в данном случае с DISTINCT не нужно писать кучу лапши. Вы четко и ясно озвучили решение проблемы (надеюсь это то, что нужно ТС-у)

10 июн 2014 в 19:35

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Для получения уникальных значений в выборке можно воспользоваться двумя способами. Пусть имеется таблица tbl со столбцом name .

Группировка значений

Для группировки значений предназначена конструкция GROUP BY после которой следует имя столбца. Побочным эффектом группировки является тот факт, что вы получаете только уникальные значения сгруппированного поля

SELECT name FROM tbl GROUP BY name 

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

Явный запрос уникальных значений

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

SELECT DISTINCT name FROM tbl 

Артём Санников

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Главная › Базы данных › MySQL › Выборка данных › Уникальные значения в SQL, команда DISTINCT

Уникальные значения в SQL, команда DISTINCT

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

Синтаксис запроса SELECT с параметром DISTINCT

SELECT DISTINCT поле_таблицы FROM таблица;

Практический пример

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

Произведём вывод фруктов без повторяющихся значений:

SELECT DISTINCT name fruits;

Записи по теме

  • Условный оператор WHERE в SQL
  • Оператор AS. Псевдонимы в SQL
  • Выбор данных в SQL, команда SELECT

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

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