0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Представим, что мы хотим узнать, на какие курсы онлайн-школы записались студенты. Для этого нам нужно выполнить запрос на выборку из таблицы course_members:</p>
1
<p>Представим, что мы хотим узнать, на какие курсы онлайн-школы записались студенты. Для этого нам нужно выполнить запрос на выборку из таблицы course_members:</p>
2
<p><a>View on DB Fiddle</a></p>
2
<p><a>View on DB Fiddle</a></p>
3
<p>Мы выбрали идентификаторы всех курсов, на которые записался хотя бы один студент. Видно, что некоторые идентификаторы курсов повторяются - на них записалось по несколько студентов.</p>
3
<p>Мы выбрали идентификаторы всех курсов, на которые записался хотя бы один студент. Видно, что некоторые идентификаторы курсов повторяются - на них записалось по несколько студентов.</p>
4
<p>Сейчас мы изучаем только сами курсы, не обращая внимания на количество записавшихся студентов. Поэтому нам нужно убрать повторяющиеся идентификаторы и оставить только уникальные.</p>
4
<p>Сейчас мы изучаем только сами курсы, не обращая внимания на количество записавшихся студентов. Поэтому нам нужно убрать повторяющиеся идентификаторы и оставить только уникальные.</p>
5
<p>В этом уроке мы разберемся, как это сделать.</p>
5
<p>В этом уроке мы разберемся, как это сделать.</p>
6
<h2>Как убрать повторяющиеся строки</h2>
6
<h2>Как убрать повторяющиеся строки</h2>
7
<p>В языке SQL существует специальный оператор DISTINCT, который удаляет повторяющиеся строки запроса и оставляет только уникальные. Запрос будет выглядеть так:</p>
7
<p>В языке SQL существует специальный оператор DISTINCT, который удаляет повторяющиеся строки запроса и оставляет только уникальные. Запрос будет выглядеть так:</p>
8
<p><a>View on DB Fiddle</a></p>
8
<p><a>View on DB Fiddle</a></p>
9
<p>Теперь из этого запроса исключены все повторяющиеся строки.</p>
9
<p>Теперь из этого запроса исключены все повторяющиеся строки.</p>
10
<p>Таким образом, чтобы исключить повторяющиеся строки, нужно после оператора SELECT указать DISTINCT и перечислить все нужные столбцы.</p>
10
<p>Таким образом, чтобы исключить повторяющиеся строки, нужно после оператора SELECT указать DISTINCT и перечислить все нужные столбцы.</p>
11
<p>Если мы добавим в наш запрос еще одно поле user_id, то это изменит результат запроса. В эту выборку попадут строки с уникальным сочетанием курса и слушателя.</p>
11
<p>Если мы добавим в наш запрос еще одно поле user_id, то это изменит результат запроса. В эту выборку попадут строки с уникальным сочетанием курса и слушателя.</p>
12
<p>По отдельности курсы и слушатели могут повторяться, но их сочетание будет уникальным:</p>
12
<p>По отдельности курсы и слушатели могут повторяться, но их сочетание будет уникальным:</p>
13
<p><a>View on DB Fiddle</a></p>
13
<p><a>View on DB Fiddle</a></p>
14
<h2>Оператор DISTINCT ON</h2>
14
<h2>Оператор DISTINCT ON</h2>
15
<p>Представим, что мы хотим выбрать уникальные курсы и добавить дату, когда на него записался первый студент.</p>
15
<p>Представим, что мы хотим выбрать уникальные курсы и добавить дату, когда на него записался первый студент.</p>
16
<p>Напишем запрос, в котором после DISTINCT укажем course_id и created_at. Он вернет нам уникальные сочетания этих двух полей:</p>
16
<p>Напишем запрос, в котором после DISTINCT укажем course_id и created_at. Он вернет нам уникальные сочетания этих двух полей:</p>
17
<p><a>View on DB Fiddle</a></p>
17
<p><a>View on DB Fiddle</a></p>
18
<p>Есть модификация этого оператора - DISTINCT ON. Такой вариант оператора позволяет указать:</p>
18
<p>Есть модификация этого оператора - DISTINCT ON. Такой вариант оператора позволяет указать:</p>
19
<ul><li>Поле, которое должно быть уникальным.</li>
19
<ul><li>Поле, которое должно быть уникальным.</li>
20
<li>Поля, которые нужно вывести.</li>
20
<li>Поля, которые нужно вывести.</li>
21
</ul><p>Так выглядит запрос с DISTINCT ON:</p>
21
</ul><p>Так выглядит запрос с DISTINCT ON:</p>
22
<p><a>View on DB Fiddle</a></p>
22
<p><a>View on DB Fiddle</a></p>
23
<p>После DISTINCT ON в круглых скобках мы указываем поле, по которому будет проверяться уникальность. Далее мы перечисляем те поля, которые мы хотим видеть в запросе.</p>
23
<p>После DISTINCT ON в круглых скобках мы указываем поле, по которому будет проверяться уникальность. Далее мы перечисляем те поля, которые мы хотим видеть в запросе.</p>
24
<p>В нашем запросе идентификаторы курсов не повторяются, а в качестве created_at выводится первая дата выбора курса.</p>
24
<p>В нашем запросе идентификаторы курсов не повторяются, а в качестве created_at выводится первая дата выбора курса.</p>
25
<p>В DISTINCT ON можно указывать несколько полей в качестве уникальных:</p>
25
<p>В DISTINCT ON можно указывать несколько полей в качестве уникальных:</p>
26
<p><a>View on DB Fiddle</a></p>
26
<p><a>View on DB Fiddle</a></p>
27
<p>Такой запрос будет равносилен первому запросу этого раздела:</p>
27
<p>Такой запрос будет равносилен первому запросу этого раздела:</p>
28
<h2>Сортировка с оператором DISTINCT ON</h2>
28
<h2>Сортировка с оператором DISTINCT ON</h2>
29
<p>При работе с DISTINCT ON важно правильно использовать сортировку. Первыми полями в ORDER BY должны быть те, которые идут после DISTINCT ON.</p>
29
<p>При работе с DISTINCT ON важно правильно использовать сортировку. Первыми полями в ORDER BY должны быть те, которые идут после DISTINCT ON.</p>
30
<p>Для примера напишем еще один запрос - к каждому уникальному курсу выведем дату, в которую записался последний студент.</p>
30
<p>Для примера напишем еще один запрос - к каждому уникальному курсу выведем дату, в которую записался последний студент.</p>
31
<p>Для этого нужно после ORDER BY сначала указать поле course_id, как того требует синтаксис. Затем нужно добавить поле created_at с сортировкой по убыванию:</p>
31
<p>Для этого нужно после ORDER BY сначала указать поле course_id, как того требует синтаксис. Затем нужно добавить поле created_at с сортировкой по убыванию:</p>
32
<p><a>View on DB Fiddle</a></p>
32
<p><a>View on DB Fiddle</a></p>
33
<p>Этот запрос выведет все уникальные курсы и дату, когда на этот курс в последний раз записывались.</p>
33
<p>Этот запрос выведет все уникальные курсы и дату, когда на этот курс в последний раз записывались.</p>
34
<h2>Выводы</h2>
34
<h2>Выводы</h2>
35
<p>В этом уроке мы изучили оператор DISTINCT и научились с помощью него выбирать уникальные строки и удалять дублирующиеся. Кроме того, мы разобрались с модификацией DISTINCT ON, научились задавать уникальные поля и добавлять к ним дополнительную информацию.</p>
35
<p>В этом уроке мы изучили оператор DISTINCT и научились с помощью него выбирать уникальные строки и удалять дублирующиеся. Кроме того, мы разобрались с модификацией DISTINCT ON, научились задавать уникальные поля и добавлять к ним дополнительную информацию.</p>
36
<p>В следующих уроках мы научимся некоторым функциям, которые часто используются вместе с оператором DISTINCT.</p>
36
<p>В следующих уроках мы научимся некоторым функциям, которые часто используются вместе с оператором DISTINCT.</p>