Выборка уникальных комбинаций полей в SQL: примеры

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для отбора уникальных комбинаций двух столбцов в SQL используйте следующую команду:

SQL
Скопировать код
SELECT DISTINCT columnA, columnB FROM yourTable;

Поменяйте columnA, columnB и yourTable на фактические названия столбцов и таблицы, чтобы получить уникальные пары значений.

Кинга Идем в IT: пошаговый план для смены профессии

Детально – Получаем и считаем уникальные пары

Если вам необходимо не только выбрать уникальные пары, но и подсчитать их количество в таблице, используйте следующую конструкцию:

SQL
Скопировать код
SELECT c1, c2, COUNT(*) as pairing_occurrences
FROM yourTable
GROUP BY c1, c2;

GROUP BY сгруппирует идентичные записи, а COUNT(*) позволит определить количество вхождений каждой пары значений в c1 и c2.

Настройка производительности – Ускоряем!

Работа с большими объемами данных может замедлить операции с DISTINCT и подсчетами. Для ускорения запросов будет оптимальным создание индексов для столбцов:

SQL
Скопировать код
CREATE INDEX runway ON yourTable(c1, c2);

Индексация позволяет системе обрабатывать запросы быстрее и значительно сокращает время их выполнения.

Визуализация

Представим, что вы заносите в базу пары животных, наблюдая за их взаимодействием в зоопарке. Каждую замеченную пару нужно записать в базу единожды:

Markdown
Скопировать код
Записи зоопарка (🌐): {('🐘', '🦛'), ('🐅', '🦓'), ('🐘', '🦛'), ('🐅', '🦒')}

Если мы хотим учесть слонов (🐘) и бегемотов (🦛), используем DISTINCT:

SQL
Скопировать код
SELECT DISTINCT animal1, animal2 FROM zooInventory WHERE animalPair = ('🐘', '🦛');

В итоге учет уникальных наблюдений будет выглядеть так:

Markdown
Скопировать код
Журнал уникальных наблюдений (🔍):

| Животное 1 | Животное 2 |
| ---------- | ---------- |
| 🐘         | 🦛         |
| 🐅         | 🦓         |
| 🐅         | 🦒         |

"Уникальное наблюдение" означает, что животные занесены в учетную книгу только один раз.

Особенности – Обработка пустых значений

С пустыми значениями DISTINCT может вести себя неоднозначно. Исключите их из выборки следующим образом:

SQL
Скопировать код
SELECT DISTINCT c1, c2 FROM yourTable WHERE c1 IS NOT NULL AND c2 IS NOT NULL;

Такой подход поможет избежать проблем, связанных со сравнением null значений, и сделает результаты выполнения запроса более предсказуемыми.

Дополнительные инструменты SQL – Группировка и оконные функции

Кроме DISTINCT, SQL предлагает GROUP BY и оконные функции, например, ROW_NUMBER(), что позволяет тонко настроить группировку и выбор данных:

SQL
Скопировать код
SELECT c1, c2,
       ROW_NUMBER() OVER (PARTITION BY c1, c2 ORDER BY extraColumn) as rn
FROM yourTable
WHERE rn = 1;

Такие операции особенно полезны при создании отчетов, так как они гарантируют уникальность строк и возможность отсортировать результаты.

Полезные материалы

  1. SQL SELECT DISTINCT Statement – W3Schools — Основы использования DISTINCT в SQL.
  2. Performance-Postgresql COUNT(DISTINCT ...) very slow – Stack Overflow — Обсуждение способов оптимизации DISTINCT для повышения производительности.
  3. SQL – DISTINCT Keyword – Tutorialspoint — Объяснение влияния и применения DISTINCT в SQL-запросах.
  4. SQL SELECT DISTINCT – Dofactory — Примеры использования с SQL Server для отработки практических навыков.

Завершение

Для достижения мастерства в SQL необходимо много практиковаться. Если этот материал окажется вам полезным, поддержите его автора! Продолжайте путь в освоении SQL!👩‍💻