Выбор отдельных уникальных значений по столбцам в MySQL

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

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

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

Чтобы выбрать уникальные комбинации значений из нескольких колонок, используется оператор DISTINCT:

SQL
Скопировать код
SELECT DISTINCT column1, column2 FROM table;

С помощью этого запроса вы получите набор уникальных пар значений, взятых из колонок column1 и column2.

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

Уникальные значения в каждой колонке

Если вам требуется извлечь уникальные значения для каждой колонки отдельно, используйте подзапросы этаким юнным искателем SQL:

SQL
Скопировать код
(SELECT DISTINCT column1 FROM table)
UNION
(SELECT DISTINCT column2 FROM table);

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

Когда применять GROUP BY

Если вам нужно получить комбинацию значений в колонках с возможностью дальнейшей агрегации данных, GROUP BY будет наиболее подходящим выбором. Однако для получения только уникальных пар значений лучше использовать SELECT DISTINCT.

SQL
Скопировать код
SELECT column1, column2, COUNT(*) 
FROM table 
GROUP BY column1, column2;

Такой запрос вернет число уникальных пар значений из колонок column1 и column2.

Проектирование таблицы для оптимальной производительности

Оптимизация структуры таблицы может значительно ускорить запросы с оператором DISTINCT, повышая общую производительность системы. Денормализация данных и использование индексов помогут вам увеличить скорость выполнения запросов.

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

Можно воспринимать SELECT DISTINCT через призму фотографии:

Markdown
Скопировать код
Представьте, что каждая строка вашей таблицы MySQL — это фотография в альбоме.

| Фото | Человек (столбец 1) | Пейзаж (столбец 2) | Погода (столбец 3) |
| ---- | -------------------- | ------------------- | ------------------ |
| 📸1  | Алиса                | Горы               | Солнечно           |
| 📸2  | Алиса                | Горы               | Дождливо           |
| 📸3  | Боб                  | Лес                | Солнечно           |
| 📸4  | Алиса                | Горы               | Солнечно           |

Применяя SELECT DISTINCT к колонкам Человек и Пейзаж:

SQL
Скопировать код
SELECT DISTINCT `Person`, `Landscape` FROM `Photos`;

Вы получите следующую коллекцию уникальных снимков:

Markdown
Скопировать код
| Человек | Пейзаж |
| -------- | ------ |
| Алиса    | Горы   |
| Боб      | Лес    |

Все фотографии в этой коллекции уникальны – без повторений! 🖼️

Продвинутые методы для достижения уникальности

Использование GROUP_CONCAT

Для создания списка уникальных значений в колонке можно использовать GROUP_CONCAT вместе с DISTINCT:

SQL
Скопировать код
SELECT 
    GROUP_CONCAT(DISTINCT column1 ORDER BY column1) AS unique_col1,
    GROUP_CONCAT(DISTINCT column2 ORDER BY column2) AS unique_col2
FROM table;

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

Избегайте CONCAT для уникальности

CONCAT() объединяет значения в единую строку, что не обеспечивает уникальность каждого значения. Этот метод не подходит, когда нужно обеспечить уникальность.

Использование UNION для уникальности

UNION позволяет получить уникальный результат двух запросов:

SQL
Скопировать код
(SELECT DISTINCT column1 FROM table)
UNION
(SELECT DISTINCT column2 FROM table);

Этот запрос удалит дублированные значения из разных колонок.

Использование псевдонимов для колонок

Использование псевдонимов помогает упростить восприятие и чтение SQL-кода:

SQL
Скопировать код
SELECT DISTINCT column1 AS unique_column1, column2 AS unique_column2 FROM table;

Пропуск GROUP BY при ненадобности

Оператор GROUP BY используется для агрегации данных. Если требуются только уникальные значения в отдельных колонках, от него можно отказаться.

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

  1. MySQL :: MySQL 8.0 Reference Manual :: 13.2.13 SELECT Statement — официальная документация MySQL о команде SELECT.
  2. SQL SELECT DISTINCT Statement — руководство W3Schools по использованию SELECT DISTINCT в SQL.
  3. objective c – Is it wrong to call an "init" method multiple times — обсуждение на Stack Overflow о выборке уникальных колонок с использованием MySQL DISTINCT.
  4. DZone — статья, объясняющая различия между Distinct и Group By.
  5. Medium — сравнение SELECT DISTINCT и GROUP BY в контексте MySQL.