GROUP BY и DISTINCT в MySQL: анализ эффектов и использование дедупликации
GROUP BY и DISTINCT в MySQL: анализ эффектов и использование дедупликации

В базе данных MySQL мы часто сталкиваемся с ситуациями, когда данные необходимо сгруппировать и дедуплицировать. Для достижения этой цели мы обычно используем два ключевых слова GROUP BY и DISTINCT. Хотя их оба можно использовать для удаления дубликатов, они имеют разное использование и эффекты. В этой статье будет подробно проанализировано использование GROUP BY и DISTINCT в MySQL и сравнено, оказывают ли они одинаковый эффект дедупликации на одно и то же поле.

1. Использование и последствия GROUP BY

Ключевое слово GROUP BY используется для группировки набора результатов по одному или нескольким столбцам и применения агрегатной функции к каждой группе. Например, у нас есть таблица, хранящая информацию о студентах, включающая два столбца: имя студента (имя) и город (city). Теперь мы хотим сгруппировать студентов по городам и посчитать количество студентов в каждом городе. Этого можно добиться с помощью следующего оператора SQL:

Язык кода:sql
копировать
SELECT city, COUNT(*) AS student_count
FROM students
GROUP BY city;

В приведенном выше коде студенты группируются по городам с помощью GROUP BY city, а функция COUNT(*) используется для расчета количества студентов в каждом городе. После выполнения этого кода мы получим набор результатов, содержащий каждый город и соответствующее количество студентов.

Эффект GROUP BY заключается в группировке строк в наборе результатов в соответствии с указанными столбцами и применении агрегатной функции к каждой группе. Вместо удаления повторяющихся строк он группирует повторяющиеся строки и применяет к каждой группе агрегатную функцию. Следовательно, если мы не будем использовать функцию COUNT(*) в запросе в приведенном выше примере, а воспользуемся другими агрегатными функциями, такими как SUM(), AVG() и т. д., мы получим разные результаты.

2. Использование и эффекты DISTINCT

Ключевое слово DISTINCT используется для возврата уникальных, не повторяющихся строк. Когда мы хотим получить все уникальные значения определенного столбца из таблицы, мы можем использовать ключевое слово DISTINCT. Например, у нас есть таблица, в которой хранятся города, в которых проживают студенты, и теперь мы хотим получить все уникальные названия городов. Этого можно добиться с помощью следующего оператора SQL:

Язык кода:sql
копировать
SELECT DISTINCT city
FROM students;

В приведенном выше коде с помощью SELECT DISTINCT city мы выберем и вернем все уникальные названия городов из таблицы студентов. После выполнения этого кода мы получим набор результатов, содержащий все уникальные названия городов.

Эффект DISTINCT заключается в возврате уникальных неповторяющихся строк вместо группировки и агрегирования набора результатов. Он удаляет повторяющиеся строки из набора результатов и возвращает все уникальные строки. Поэтому ключевое слово DISTINCT часто используется для получения списка уникальных значений столбца.

3. Сравнение эффектов дедупликации GROUP BY и DISTINCT в одном и том же поле.

Хотя для удаления дубликатов можно использовать и GROUP BY, и DISTINCT, их использование и эффекты различны. GROUP BY используется для группировки и агрегирования набора результатов, а DISTINCT используется для возврата уникальных и неповторяющихся строк.

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

Если мы используем GROUP BY для его реализации, мы можем использовать следующий оператор SQL:

Язык кода:sql
копировать
SELECT city, COUNT(*) AS student_count
FROM students
GROUP BY city;

Если для этого мы используем DISTINCT, мы можем использовать следующий оператор SQL:

Язык кода:sql
копировать
SELECT DISTINCT city
FROM students;

Хотя оба оператора запроса могут возвращать уникальные названия городов, их эффект различен. Используя оператор GROUP BY, мы можем получить количество студентов в каждом городе одновременно; с помощью оператора DISTINCT мы можем получить только уникальные названия городов, но не количество студентов.

Конечно, мне бы хотелось продолжать писать для вас. Ниже приведена остальная часть статьи.

4. Сравнение эффектов Group и Distinct

Теперь давайте сравним влияние Group и Distinct на дедупликацию одного и того же поля. Для демонстрации мы будем использовать образец набора данных.

Предположим, у нас есть таблица «Сотрудники» со следующими столбцами: идентификатор, имя и отдел. В качестве примера мы возьмем поле «отдел» для выполнения операции дедупликации.

Сначала мы используем ключевое слово Distinct для удаления повторяющихся запросов:

Язык кода:sql
копировать
SELECT DISTINCT department FROM employees;

Это вернет все уникальные названия отделов.

Далее мы используем ключевое слово Group By для выполнения групповых запросов:

Язык кода:sql
копировать
SELECT department FROM employees GROUP BY department;

Этот запрос сгруппирует по названию отдела и вернет первую запись для каждого отдела.

Как видно из двух приведенных выше запросов, эффекты Distinct и Group By одинаковы, и оба могут удалять повторяющиеся значения полей. Однако между ними есть некоторые тонкие различия.

Ключевое слово Distinct подходит для операций дедупликации с одним полем, а ключевое слово Group By больше подходит для групповых вычислений и операций агрегирования. Когда нам нужно выполнить статистические вычисления для групп, Group By является более подходящим выбором.

Кроме того, Group By также можно использовать для группировки операций по нескольким полям. Например, мы можем выполнять групповые запросы по отделу и должности одновременно:

Язык кода:sql
копировать
SELECT department, position FROM employees GROUP BY department, position;

Это вернет первую запись для каждого отдела и должности.

5. Заключение

В этой статье мы узнали об использовании Group и Distinct в Mysql, сравнили и сопоставили их.

  • Ключевое слово Group By используется для группировки набора результатов по указанным полям и подходит для групповых вычислений и операций агрегирования.
  • Ключевое слово Distinct используется для удаления повторяющихся значений полей в наборе результатов и подходит для операций дедупликации над одним полем.
  • При дедупликации одного и того же поля параметры Group By и Distinct имеют одинаковый эффект.
  • Group By также можно использовать для группировки операций по нескольким полям.

При фактическом использовании нам необходимо выбирать подходящие ключевые слова в соответствии с конкретными потребностями. Если вам нужно дедуплицировать значение только определенного поля, вы можете использовать ключевое слово Distinct. Если вам нужно выполнить групповые вычисления и операции агрегирования с набором результатов, вы можете использовать ключевое слово Group By.

Благодаря разумному использованию Group и Distinct мы можем лучше обрабатывать и анализировать данные в базе данных, извлекать полезную информацию и выполнять статистические расчеты.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose