HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Чтобы узнать все имена, которые есть у наших пользователей, нужно выполнить запрос не всех полей, а только имени:</p>
1 <p>Чтобы узнать все имена, которые есть у наших пользователей, нужно выполнить запрос не всех полей, а только имени:</p>
2 <p>Проблема в том, что эти имена наверняка дублируются, так как у людей могут быть одинаковые имена. Избавиться от дублей можно с помощью DISTINCT. В этом уроке узнаем, как находить уникальные записи.</p>
2 <p>Проблема в том, что эти имена наверняка дублируются, так как у людей могут быть одинаковые имена. Избавиться от дублей можно с помощью DISTINCT. В этом уроке узнаем, как находить уникальные записи.</p>
3 <h2>Находим уникальные записи</h2>
3 <h2>Находим уникальные записи</h2>
4 <p>Чтобы имена из примера выше не дублировались, сделаем такой запрос:</p>
4 <p>Чтобы имена из примера выше не дублировались, сделаем такой запрос:</p>
5 <p>Все повторяющиеся строки исключаются из результирующего набора. Так из каждой группы дубликатов остается одна строка.</p>
5 <p>Все повторяющиеся строки исключаются из результирующего набора. Так из каждой группы дубликатов остается одна строка.</p>
6 <p>DISTINCT позволяет указывать не одно, а сразу несколько полей:</p>
6 <p>DISTINCT позволяет указывать не одно, а сразу несколько полей:</p>
7 <p>В эту выборку попадут все значения с уникальным сочетанием имен и фамилий. Это значит, что имена и фамилии могут повторяться, но пара всегда уникальна. Если в DISTINCT добавить первичный ключ (SELECT DISTINCT id, first_name FROM users), то запрос извлечет все записи. Такой результат является следствием уникальности первичного ключа.</p>
7 <p>В эту выборку попадут все значения с уникальным сочетанием имен и фамилий. Это значит, что имена и фамилии могут повторяться, но пара всегда уникальна. Если в DISTINCT добавить первичный ключ (SELECT DISTINCT id, first_name FROM users), то запрос извлечет все записи. Такой результат является следствием уникальности первичного ключа.</p>
8 <p>DISTINCT можно совмещать с агрегатными функциями. С ними будем разбираться в отдельном уроке. Например, можно посчитать количество пользователей с уникальными именами:</p>
8 <p>DISTINCT можно совмещать с агрегатными функциями. С ними будем разбираться в отдельном уроке. Например, можно посчитать количество пользователей с уникальными именами:</p>
9 <p>Такой запрос покажет количество уникальных имен.</p>
9 <p>Такой запрос покажет количество уникальных имен.</p>
10 <h2>DISTINCT ON</h2>
10 <h2>DISTINCT ON</h2>
11 <p>В отличие от базовой формы, DISTINCT ON позволяет отдельно указывать два типа полей - для проверки уникальности и для результирующей выборки:</p>
11 <p>В отличие от базовой формы, DISTINCT ON позволяет отдельно указывать два типа полей - для проверки уникальности и для результирующей выборки:</p>
12 <p>При работе с DISTINCT ON важно правильно использовать сортировку:</p>
12 <p>При работе с DISTINCT ON важно правильно использовать сортировку:</p>
13 <p>Такой запрос вернет первый созданный топик для каждого пользователя. Запросы с DISTINCT ON требуют, чтобы первыми полями в ORDER BY были те, которые идут после ON. Только тогда сортировка отработает так, как ожидается. В запросе выше это user_id - указан в сортировке первым. В противном случае результат будет неверным.</p>
13 <p>Такой запрос вернет первый созданный топик для каждого пользователя. Запросы с DISTINCT ON требуют, чтобы первыми полями в ORDER BY были те, которые идут после ON. Только тогда сортировка отработает так, как ожидается. В запросе выше это user_id - указан в сортировке первым. В противном случае результат будет неверным.</p>
14 <p>В таких запросах сначала выполняется сортировка и уже после этого отрабатывает DISTINCT, так как он берет первую запись из группы. Но мы ведь не знаем какая запись первая. Нужно гарантировать порядок, в чем помогает ORDER BY.</p>
14 <p>В таких запросах сначала выполняется сортировка и уже после этого отрабатывает DISTINCT, так как он берет первую запись из группы. Но мы ведь не знаем какая запись первая. Нужно гарантировать порядок, в чем помогает ORDER BY.</p>
15 <h2>Выводы</h2>
15 <h2>Выводы</h2>
16 <p>В этом уроке мы изучили функцию DISTINCT. С ее помощью вы можете узнать все необходимые значения, найти уникальные записи среди них и избавиться от дублей.</p>
16 <p>В этом уроке мы изучили функцию DISTINCT. С ее помощью вы можете узнать все необходимые значения, найти уникальные записи среди них и избавиться от дублей.</p>