Sql distinct по нескольким полям

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

Синтаксис запросов SELECT DISTINCT в MySQL

Базовый синтаксис запросов SELECT DISTINCT :

  • DISTINCT : это ключевое слово возвращает уникальные результаты;
  • Columns : позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
  • Source : одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN , чтобы соединить несколько таблиц.

Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:

DISTINCT-запрос к одному столбцу

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

Теперь я использую ключевое слово DISTINCT :

DISTINCT-запрос к нескольким столбцам

Когда мы используем запрос MySQL DISTINCT по нескольким полям , SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession :

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

  • Bachelors и Developer — это уникальная комбинация;
  • Bachelors и Programming — это уникальная комбинация и т.д.
Читайте также:  Банкомат сбербанк не работает

Пример DISTINCT-запроса в MySQL – условие WHERE

В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE . Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers , в которых годовой доход больше или равен 85000 :

Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession , 10 записей не соответствуют условию WHERE . Поэтому на скриншоте показано только 5 записей.

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

DISTINCT или GROUP BY в MySQL

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

Единственное отличие между ними заключается в следующем:

  • GROUP BY сначала сортирует данные, а затем осуществляет группировку;
  • Ключевое слово DISTINCT не выполняет сортировки.

Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY , то получите тот же результат, что и при применении GROUP BY . Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails :

Уберём ключевое слово DISTINCT и используем выражение GROUP BY :

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

В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY :

Результат тот же, что и при использовании GROUP BY :

Пример DISTINCT-запроса в MySQL – командная строка

Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails :

Читайте также:  Imaqliq g box альтернативная прошивка

Данная публикация представляет собой перевод статьи « MySQL Distinct » , подготовленной дружной командой проекта Интернет-технологии.ру

Помогите сформировать sql запрос

— это работает, но выбирается только поле news, а мне надо id, news, reg, name, comment,date_add

— этот не работает

2 ответа 2

DISTINCT — это уникальность по всем полям ( практически тоже самое что GROUP BY по всем полям )

То что хотите, можно как-то так:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками select sql или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.17.35809

В моей таблице, у меня есть Collection_Date и Tag_Date поле, оба типа date .

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

Я попытался это:

Тем не менее, это возвращает только строки с уникальным Collection_Date и Tag_Date .

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

Как я могу это сделать?

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

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

Читайте также:  Total war rome 2 последнее дополнение

Этот запрос возвращает все уникальные collection_date и tag_date. Если collection_date такого же, как tag_date они оба вернулись. Запрос также возвращает какой тип даты, когда она:

Если вы хотите только один tag_date или collection_date, когда они имеют дату в общем, то вы можете использовать

Rate this post

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

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