Предложение MySQL GROUP BY и HAVING с примерами

Что такое группа по пункту?

Предложение GROUP BY – это команда SQL, которая используется для группировки строк с одинаковыми значениями .

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

Это то, что он делает, обобщая данные из базы данных.

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

Синтаксис GROUP BY

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

ВОТ

  • “SELECT statements …” – это стандартный SQL-запрос SQL SELECT.
  • “ GROUP BY column_name1 ” – это предложение, которое выполняет группировку на основе column_name1.
  • “[, column_name2, …]” является необязательным; представляет другие имена столбцов, когда группировка выполняется более чем на один столбец.
  •  ”Условие [HAVING]” является необязательным; он используется для ограничения строк, затронутых предложением GROUP BY. Это похоже на предложение WHERE.

Группировка с использованием единой колонки

Чтобы помочь понять эффект предложения Group By, давайте выполним простой запрос, который возвращает все записи по полу из таблицы участников.

Пол
женский
женский
мужчина
женский
мужчина
мужчина
мужчина
мужчина
мужчина

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

Выполнение вышеуказанного скрипта в workbench MySQL в Myflixdb дает нам следующие результаты.

 

Пол
женский
мужчина

Обратите внимание, что возвращены только два результата. Это связано с тем, что у нас есть только два типа пола: мужчина и женщина. Предложение GROUP BY сгруппировало все “мужские” члены вместе и вернуло для него только одну строку. Он сделал то же самое с членами “Женщины”.

Группировка с использованием нескольких столбцов

Предположим, что мы хотим получить список фильмов category_id и соответствующие годы, в которые они были выпущены.

Давайте посмотрим на результат этого простого запроса

category_id year_released
1 2011
2 2008
НОЛЬ 2008
НОЛЬ 2010
8 2007
6 2007
6 2007
8 2005
НОЛЬ 2012
7 1920
8 НОЛЬ
8 1920

Вышеприведенный результат имеет много дубликатов.

Давайте выполним тот же запрос, используя группу by –

Выполнение приведенного выше сценария в workbench MySQL для myflixdb дает нам следующие результаты, показанные ниже.

category_id year_released
НОЛЬ 2008
НОЛЬ 2010
НОЛЬ 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

Предложение GROUP BY работает как с идентификатором категории, так и с годом выпуска, чтобы идентифицировать уникальные строки в нашем примере выше.

Если идентификатор категории один и тот же, но год выпуска отличается, то строка рассматривается как уникальная. Если идентификатор категории и год выпуска одинаковы для более чем одной строки, то это считается дубликатом и только одна строка Показано.

Группировка и агрегатные функции

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

Выполнение приведенного выше сценария в workbench MySQL на myflixdb дает нам следующие результаты.

Пол COUNT ( ”) membership_number
женский 3
мужчина 5

 

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

Ограничение результатов запроса с помощью предложения HAVING

Не всегда мы хотим выполнять группировки по всем данным в данной таблице. Будут моменты, когда мы захотим ограничить наши результаты некоторыми определенными критериями. В таких случаях мы можем использовать предложение HAVING

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

Выполнение вышеуказанного скрипта в workbench MySQL в Myflixdb дает нам следующие результаты, показанные ниже.

movie_id заглавие директор year_released category_id
9 Медовые луны Джон Шульц 2005 8
5 Маленькие девочки папы НОЛЬ 2007 8

 

Заметьте, что только фильмы с номером категории 8 были затронуты нашим предложением GROUP BY.

Резюме

  • Предложение GROUP BY используется для группировки строк с одинаковыми значениями.
  • Предложение GROUP BY используется вместе с оператором SQL SELECT.
  • Оператор SELECT, используемый в предложении GROUP BY, может использоваться только с именами столбцов, агрегатными функциями, константами и выражениями.
  • Предложение HAVING используется для ограничения результатов, возвращаемых предложением GROUP BY.
0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *