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

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

  • автор:

Веб-заметки и Веб-подсказки

SQL: Как выбрать только уникальные (неповторяющиеся) записи

SELECT DISTINCT .

Отфильтровать все повторяющиеся записи с результата запроса можно с помощью DISTINCT.

Пример использования:
Допустим у нас есть таблица «winners» с данными:

id winner_name
1 Nick
2 Ann
3 Ann
4 David
5 Nick
6 Nick
7 Natali

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

SELECT DISTINCT winner_name FROM winners;

Результат запроса:

winner_name
Nick
Ann
David
Natali

15 комментариев на «SQL: Как выбрать только уникальные (неповторяющиеся) записи»

Спасибо огромное, помогло!)

как в php сделать вывод данных?

Как я искал подобное решение. Огромное вам спасибо!

А как удалить неуникальные??

а еще можно использовать group by :

SELECT Filed FROM Table GROUP BY Field;

А если нужен и столбец id? подходит любое из значений… например
id winner_name
1 Nick
2 Ann
4 David
5 Nick
7 Natali

как такой запрос может выглядеть?

Так же есть задача, похожая на предыдущую. Есть таблица с вопросами из разных тем для экзамена. Нужно выбрать по одному случайному вопросу из 2-х любых тем (например так).
id theme question
1 1 question1
2 1 question2
3 1 question3
4 2 question4
5 2 question5
6 3 question6
7 3 question7
Тут решение из составного запроса в котором случайно сортируются все вопросы и берутся только 2 различные темы и потом как сделать, чтобы вопросов было по одному… Если кто знает — помогите, пожалуйста

SELECT DISTINCT в SQL

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

Введение в оператор SQL DISTINCT

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

Introduction to SQL DISTINCT operator

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

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

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

Вместо DISTINCT стоит применять предложение GROUP BY в команде SELECT если необходимо выбрать два столбца и скрыть дубли в одном столбце.

Примеры SQL DISTINCT

Чтобы продемонстрировать работу оператора SELECT DISTINCT в SQL возьмем для примера таблицу employees .

employees table

1) Пример использования оператора SQL DISTINCT на одном столбце

Команда SELECT FROM ниже отберет данные по зарплате из колонки «Зарплата» таблицы «Сотрудники» и отсортирует строки их от максимума к минимуму:

1) Using SQL DISTINCT operator on one column example

1 result of Using SQL DISTINCT operator on one column example

В наборе результатов есть несколько дублей. Например, 17000, 12000 и 9000.

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

1 example using distinct

1 example result of using distinct

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

2) Использование оператора SQL DISTINCT на примере нескольких столбцов

Команда SELECT на скрине ниже производит отбор идентификатора должности (id) и зарплаты из таблицы employees :

2 Using SQL DISTINCT operator on multiple columns example

SELECT DISTINCT в SQL

2 result of Using SQL DISTINCT operator on multiple columns example

В итоге получаем несколько задублированных записей. К примеру, job_id=5 и salary=17000 . Это говорит о наличии двух сотрудников с одними и теми же id должности и одинаковой зарплатой.

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

2 example using distinct

2 example result of using distinct

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

SQL DISTINCT и NULL

В базе данных NULL означает неизвестные или отсутствующие данные.

В отличие от таких значений, как числа, строки, даты и т. д. NULL не равен ничему, даже самому себе. Следующее выражение вернет неизвестные данные (или NULL ):

SQL DISTINCT and NULL

Обычно оператор DISTINCT рассматривает все NULL одинаково. Поэтому оператор DISTINCT сохраняет только один NULL в наборе результатов.

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

Например, следующий запрос возвращает разные номера телефонов сотрудников:

example, the following statement returns the distinct phone numbers of employees

result of example, the following statement returns the distinct phone numbers of employees

Следует заметить, что запрос возвращает только один NULL в наборе результатов.

Сводка

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

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

Создание игр на Unreal Engine 5

Создание игр на Unreal Engine 5

Данный курс научит Вас созданию игр на Unreal Engine 5. Курс состоит из 12 модулей, в которых Вы с нуля освоите этот движок и сможете создавать самые разные игры.

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

Помимо самого курса Вас ждёт ещё 8 бесплатных ценных Бонусов: «Chaos Destruction», «Разработка 2D-игры», «Динамическая смена дня и ночи», «Создание динамической погоды», «Создание искусственного интеллекта для NPC», «Создание игры под мобильные устройства», «Создание прототипа RPG с открытым миром» и и весь курс «Создание игр на Unreal Engine 4» (актуальный и в 5-й версии), включающий в себя ещё десятки часов видеоуроков.

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

SQL-шпаргалка

Это шпаргалка для студентов моих курсов по SQL и вообще всех, кто когда-то знал SQL, но подзабыл.

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

Основы

Базовые элементы, из которых строятся запросы.

select … from …

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

where

Оставляет в результате только те строки, которые подходят под условие.

Условия бывают разные:

  • строгое равенство: city = ‘Самара’
  • неравенство: population > 10000
  • вхождение в диапазон: foundation_year between 1900 and 2000
  • вхождение в перечисленный список: region_type in (‘край’, ‘обл’)
  • совпадение с шаблоном: postal_code like ‘105%’
  • проверка на пустое значение: area is null

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

Или через and (выбрать строки, которые подходят одновременно под все условия):

distinct

Выбирает только уникальные значения (то есть без повторов) перечисленных в select столбцов:

order by

Сортирует результат по указанным столбцам.

По умолчанию сортирует от меньшего к большему, но если добавить desc — то наоборот:

limit

Оставляет только первые N строк результата. Обычно используется в связке с order by

Группировка

Объединяем данные в группы и считаем сводные показатели.

group by

Объединяет строки с одинаковым значением указанных столбцов. Используется в связке с одной из агрегатных функций:

count(*) — количество строк с одинаковым значением столбца из group by

sum(column) — сумма значений столбца column по строкам с одинаковым значением столбца из group by

avg(column) — среднее значение столбца column по строкам с одинаковым значением столбца из group by

max(column) — максимальное значение столбца column среди строк с одинаковым значением столбца из group by

min(column) — минимальное значение столбца column среди строк с одинаковым значением столбца из group by

having

Отсеивает строки из результата уже после того, как отработал group by . Этим отличается от where , который отсеивает до того, как отработал group by .

Соединение таблиц

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

Допустим, есть две таблицы — вакансии ( vacancy ) и работодатели ( employer ):

В таблице вакансий есть идентификатор работодателя — employer_id . А вот названия работодателя нет, оно в таблице employer .

Внутренний JOIN (он же INNER JOIN)

Мы хотим выбрать записи из vacancy , но добавить к ним название работодателя ( employer.name ). В этом поможет операция соединения таблиц — join :

Для каждой строчки vacancy движок базы данных лезет в таблицу employer , находит там значение id = vacancy.employer_id , извлекает name и добавляет в результат.

Если подходящее значение в employer не найдено (как для «инженера» в vacancy ) — строчка не попадает в результат.

Внешний JOIN (он же LEFT JOIN)

Внешнее соединение очень похоже на обычное:

Разница только в том, что даже когда в employer не найдена строчка с id = vacancy.employer_id («инженер» в нашем примере) — строчка из vacancy все равно попадает в результат. Название работодателя при этом будет null .

Внутренний JOIN как бы говорит:

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

Внешний JOIN же говорит:

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

Итого

Мы рассмотрели самые-самые основы SQL для выборки данных («селекты»):

  • разделы запроса: столбцы, таблицы, фильтрация, сортировка;
  • группировка данных и функции агрегации;
  • соединение таблиц.

Конечно, у SQL намного больше возможностей, но это уже совсем другая история.

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

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

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