HTML Diff
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>