SQL
Теория: Уникальные строки
Представим, что мы хотим узнать, на какие курсы онлайн-школы записались студенты. Для этого нам нужно выполнить запрос на выборку из таблицы course_members:
Мы выбрали идентификаторы всех курсов, на которые записался хотя бы один студент. Видно, что некоторые идентификаторы курсов повторяются — на них записалось по несколько студентов.
Сейчас мы изучаем только сами курсы, не обращая внимания на количество записавшихся студентов. Поэтому нам нужно убрать повторяющиеся идентификаторы и оставить только уникальные.
В этом уроке мы разберемся, как это сделать.
Как убрать повторяющиеся строки
В языке SQL существует специальный оператор DISTINCT, который удаляет повторяющиеся строки запроса и оставляет только уникальные. Запрос будет выглядеть так:
Теперь из этого запроса исключены все повторяющиеся строки.
Таким образом, чтобы исключить повторяющиеся строки, нужно после оператора SELECT указать DISTINCT и перечислить все нужные столбцы.
Если мы добавим в наш запрос еще одно поле user_id, то это изменит результат запроса. В эту выборку попадут строки с уникальным сочетанием курса и слушателя.
По отдельности курсы и слушатели могут повторяться, но их сочетание будет уникальным:
Оператор DISTINCT ON
Представим, что мы хотим выбрать уникальные курсы и добавить дату, когда на него записался первый студент.
Напишем запрос, в котором после DISTINCT укажем course_id и created_at. Он вернет нам уникальные сочетания этих двух полей:
Есть модификация этого оператора — DISTINCT ON. Такой вариант оператора позволяет указать:
- Поле, которое должно быть уникальным.
- Поля, которые нужно вывести.
Так выглядит запрос с DISTINCT ON:
После DISTINCT ON в круглых скобках мы указываем поле, по которому будет проверяться уникальность. Далее мы перечисляем те поля, которые мы хотим видеть в запросе.
В нашем запросе идентификаторы курсов не повторяются, а в качестве created_at выводится первая дата выбора курса.
В DISTINCT ON можно указывать несколько полей в качестве уникальных:
Такой запрос будет равносилен первому запросу этого раздела:
Сортировка с оператором DISTINCT ON
При работе с DISTINCT ON важно правильно использовать сортировку. Первыми полями в ORDER BY должны быть те, которые идут после DISTINCT ON.
Для примера напишем еще один запрос — к каждому уникальному курсу выведем дату, в которую записался последний студент.
Для этого нужно после ORDER BY сначала указать поле course_id, как того требует синтаксис. Затем нужно добавить поле created_at с сортировкой по убыванию:
Этот запрос выведет все уникальные курсы и дату, когда на этот курс в последний раз записывались.
Выводы
В этом уроке мы изучили оператор DISTINCT и научились с помощью него выбирать уникальные строки и удалять дублирующиеся. Кроме того, мы разобрались с модификацией DISTINCT ON, научились задавать уникальные поля и добавлять к ним дополнительную информацию.
В следующих уроках мы научимся некоторым функциям, которые часто используются вместе с оператором DISTINCT.
.png)






















