Выбор отдельных уникальных значений по столбцам в MySQL
Быстрый ответ
Чтобы выбрать уникальные комбинации значений из нескольких колонок, используется оператор DISTINCT
:
SELECT DISTINCT column1, column2 FROM table;
С помощью этого запроса вы получите набор уникальных пар значений, взятых из колонок column1
и column2
.
Уникальные значения в каждой колонке
Если вам требуется извлечь уникальные значения для каждой колонки отдельно, используйте подзапросы этаким юнным искателем SQL:
(SELECT DISTINCT column1 FROM table)
UNION
(SELECT DISTINCT column2 FROM table);
В ответе будет содержаться список уникальных значений из колонок column1
и column2
, все собранные в одной колонке.
Когда применять GROUP BY
Если вам нужно получить комбинацию значений в колонках с возможностью дальнейшей агрегации данных, GROUP BY
будет наиболее подходящим выбором. Однако для получения только уникальных пар значений лучше использовать SELECT DISTINCT
.
SELECT column1, column2, COUNT(*)
FROM table
GROUP BY column1, column2;
Такой запрос вернет число уникальных пар значений из колонок column1
и column2
.
Проектирование таблицы для оптимальной производительности
Оптимизация структуры таблицы может значительно ускорить запросы с оператором DISTINCT, повышая общую производительность системы. Денормализация данных и использование индексов помогут вам увеличить скорость выполнения запросов.
Визуализация
Можно воспринимать SELECT DISTINCT
через призму фотографии:
Представьте, что каждая строка вашей таблицы MySQL — это фотография в альбоме.
| Фото | Человек (столбец 1) | Пейзаж (столбец 2) | Погода (столбец 3) |
| ---- | -------------------- | ------------------- | ------------------ |
| 📸1 | Алиса | Горы | Солнечно |
| 📸2 | Алиса | Горы | Дождливо |
| 📸3 | Боб | Лес | Солнечно |
| 📸4 | Алиса | Горы | Солнечно |
Применяя SELECT DISTINCT
к колонкам Человек и Пейзаж:
SELECT DISTINCT `Person`, `Landscape` FROM `Photos`;
Вы получите следующую коллекцию уникальных снимков:
| Человек | Пейзаж |
| -------- | ------ |
| Алиса | Горы |
| Боб | Лес |
Все фотографии в этой коллекции уникальны – без повторений! 🖼️
Продвинутые методы для достижения уникальности
Использование GROUP_CONCAT
Для создания списка уникальных значений в колонке можно использовать GROUP_CONCAT
вместе с DISTINCT
:
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
позволяет получить уникальный результат двух запросов:
(SELECT DISTINCT column1 FROM table)
UNION
(SELECT DISTINCT column2 FROM table);
Этот запрос удалит дублированные значения из разных колонок.
Использование псевдонимов для колонок
Использование псевдонимов помогает упростить восприятие и чтение SQL-кода:
SELECT DISTINCT column1 AS unique_column1, column2 AS unique_column2 FROM table;
Пропуск GROUP BY при ненадобности
Оператор GROUP BY
используется для агрегации данных. Если требуются только уникальные значения в отдельных колонках, от него можно отказаться.
Полезные материалы
- MySQL :: MySQL 8.0 Reference Manual :: 13.2.13 SELECT Statement — официальная документация MySQL о команде SELECT.
- SQL SELECT DISTINCT Statement — руководство W3Schools по использованию SELECT DISTINCT в SQL.
- objective c – Is it wrong to call an "init" method multiple times — обсуждение на Stack Overflow о выборке уникальных колонок с использованием MySQL DISTINCT.
- DZone — статья, объясняющая различия между Distinct и Group By.
- Medium — сравнение SELECT DISTINCT и GROUP BY в контексте MySQL.