Веб-заметки и Веб-подсказки
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 . Пример применения:

Если вы указываете одну колонку после выражения DISTINCT , то именно значения в этой колонке при выборке SELECT применяется для оценки дублей.
При перечислении двух или более столбцов, оператор SELECT DISTINCT станет использовать комбинацию значений в этих колонках для оценки дубликатов.
Следует обратить внимание на то, что оператор DISTINCT удаляет только дубли строчек из набора результатов SELECT . По сути он скрывает дублирующие значения в выборке, но не удаляет физически дубли строк из таблицы.
Вместо DISTINCT стоит применять предложение GROUP BY в команде SELECT если необходимо выбрать два столбца и скрыть дубли в одном столбце.
Примеры SQL DISTINCT
Чтобы продемонстрировать работу оператора SELECT DISTINCT в SQL возьмем для примера таблицу employees .

1) Пример использования оператора SQL DISTINCT на одном столбце
Команда SELECT FROM ниже отберет данные по зарплате из колонки «Зарплата» таблицы «Сотрудники» и отсортирует строки их от максимума к минимуму:


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


На скриншоте выше можно увидеть, что выборка данных не содержит дубликатов значений зарплаты.
2) Использование оператора SQL DISTINCT на примере нескольких столбцов
Команда SELECT на скрине ниже производит отбор идентификатора должности (id) и зарплаты из таблицы employees :



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


Обратите внимание, вы все еще можете наблюдать дубль в колонке job_id , что связано с тем, что предложение SELECT DISTINCT скрывает дубли которые имеют одинаковые парные значения job_id и salary для оценки, а не только данные из колонки job_id .
SQL DISTINCT и NULL
В базе данных NULL означает неизвестные или отсутствующие данные.
В отличие от таких значений, как числа, строки, даты и т. д. NULL не равен ничему, даже самому себе. Следующее выражение вернет неизвестные данные (или NULL ):

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


Следует заметить, что запрос возвращает только один NULL в наборе результатов.
Сводка
Используйте оператор DISTINCT в предложении SELECT для фильтрация данных и удаления дубликатов строк из набора результатов.
Как оставить только уникальные значения sql

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