Sql distinct опис, приклади, властивості
Приступимо до опису порядку використання distinct в SQL.
Місце distinct в реченні Select
Аргумент distinct слід поміщати відразу після ключового слова Select в запитах. Він застосовується відразу до всіх стовпцях, зазначеним в реченні Select, тому що виключатиме з підсумкового результату запиту абсолютно ідентичні рядки. Таким чином, досить один раз вказати при написанні запиту SQL «select distinct». Виняток становить використання distinct всередині агрегатних функцій, що розглянемо трохи пізніше.

Слід пам'ятати, що більшість СУБД і не розпізнає ваш запит виду:
SELECT distinct Ostatki.Count, distinct Oboi. *
INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi
Тут кілька раз вказано розглянутий аргумент або вказано один раз, але перед другим, третім або іншим вибраним стовпцем. Ви отримаєте помилку з посиланням на неточності в синтаксисі.
Застосування distinct в стандартних запитах
Очевидно, що при грамотному побудові структури таблиць і їх заповненні, всередині однієї таблиці виключені ситуації, коли зустрічаються абсолютно ідентичні рядки. Тому виконання запиту «Select distinct *» з вибіркою з однієї таблиці з практичної точки зору.

Уявімо ситуацію, коли нам необхідно дізнатися, якого типу є у нас шпалери, відразу для зручності виконаємо сортування за типом:
Застосування distinct всередині агрегатних функцій
Аргумент SQL distinct можна використовувати з будь-якою агрегатної функцією. Але для Min і Max його застосування не дасть ніякого ефекту, а при обчисленні суми або середнього значення рідко можна уявити ситуацію, коли не потрібно було б враховувати повтори.
Припустимо, ми хочемо дізнатися, наскільки заповнений наш склад, і для цього відправляємо запит, який обчислює загальну кількість рулонів на складі:
Запит видасть відповідь 143. Якщо ж ми змінимо на:
SELECT sum (distinct Ostatki.count)
то отримаємо всього 119, адже шпалери під артикулами 3 і 7 знаходяться на складі в однаковій кількості. Однак очевидно, що ця відповідь невірний.
Найчастіше в SQL distinct застосовується з функцією Count. Так, без праці ми можемо дізнатися, скільки унікальних видів шпалер у нас взагалі є:
SELECT count (distinct Oboi.type)
Цікаво, що в одному запиті можна вказувати кілька функцій Count як з атрибутом distinct, так і без нього. Тобто це єдина ситуація, коли distinct в Select'е може бути присутнім кілька разів.
Коли слід відмовитися від застосування аргументу
Від застосування аргументу SQL distinct слід відмовитися в одному з двох випадків:
- Ви виконуєте вибірку з таблиць і впевнені в унікальності значень в кожній. У такому випадку застосування аргументу недоцільно, адже це додаткове навантаження на сервер або клієнта (в залежності від виду СУБД).
- Ви боїтеся втратити потрібні дані. Пояснимо.
Припустимо, начальник просить вас вивести список шпалер, які у вас є, із зазначенням всього двох стовпців - тип і колір. За звичкою ви вказуєте аргумент distinct:
SELECT distinct Oboi.type, Oboi.color
ORDER BY Oboi.type
