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>