Предложение SQL GROUP BY и HAVING с примерами
Что такое группа SQL по предложению?
Предложение GROUP BY — это команда SQL, которая используется для группировать строки, имеющие одинаковые значения. Предложение GROUP BY используется в инструкции SELECT. При необходимости он используется вместе с агрегатными функциями для создания сводных отчетов из базы данных.
Вот что он делает, суммирование данных из базы данных.
Запросы, содержащие предложение GROUP BY, называются сгруппированными запросами и возвращают только одну строку для каждого сгруппированного элемента.
SQL ГРУППА ПО синтаксису
Теперь, когда мы знаем, что такое предложение SQL GROUP BY, давайте посмотрим на синтаксис базовой группы по запросу.
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];
ВОТ
- «Операторы SELECT…» — это стандартный запрос команды SQL SELECT.
- ГРУППА ПО имя_столбца1” — это предложение, которое выполняет группировку на основе имя_столбца1.
- «[,column_name2,…]» не является обязательным; представляет имена других столбцов, когда группировка выполняется по нескольким столбцам.
- «[Условие НАЛИЧИЕ]» является необязательным; он используется для ограничения строк, на которые влияет предложение GROUP BY. Это похоже на Предложение WHERE.
Группировка с помощью Один столбец
Чтобы понять эффект предложения SQL Group By, давайте выполним простой запрос, который возвращает все записи о поле из таблицы участников.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Предположим, мы хотим получить уникальные значения для пола. Мы можем использовать следующий запрос –
SELECT `gender` FROM `members` GROUP BY `gender`;
Выполнение приведенного выше сценария в MySQL верстак против Myflixdb дает нам следующие результаты.
gender |
---|
Female |
Male |
Обратите внимание, что были возвращены только два результата. Это потому, что у нас есть только два гендерных типа: мужчина и женщина. Предложение GROUP BY в SQL сгруппировало все «мужские» члены вместе и вернуло для них только одну строку. То же самое произошло и с участницами «Женщины».
Группировка с использованием несколько столбцов
Предположим, мы хотим получить список фильмов Category_id и соответствующих лет, в которых они были выпущены.
Давайте посмотрим на результат этого простого запроса.
SELECT `category_id`,`year_released` FROM `movies` ;
category_id | year_released |
---|---|
1 | 2011 |
2 | 2008 |
NULL | 2008 |
NULL | 2010 |
8 | 2007 |
6 | 2007 |
6 | 2007 |
8 | 2005 |
NULL | 2012 |
7 | 1920 |
8 | NULL |
8 | 1920 |
Приведенный выше результат имеет много дубликатов.
Давайте выполним тот же запрос, используя группу по в SQL –
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Выполнение приведенного выше сценария в MySQL Workbench с myflixdb дает нам следующие результаты, показанные ниже.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
Предложение GROUP BY работает как с идентификатором категории, так и с годом выпуска, чтобы идентифицировать созданного строки в нашем примере выше.
Если идентификатор категории тот же, но год выпуска другой, то строка считается уникальной. Если идентификатор категории и год выпуска одинаковы для более чем одной строки, то она считается дубликатом и содержит только одну строку. Показано.
Группировка и агрегатные функции
Предположим, нам нужно общее количество мужчин и женщин в нашей базе данных. Для этого мы можем использовать следующий скрипт, показанный ниже.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Выполнение приведенного выше сценария в MySQL Workbench с myflixdb дает нам следующие результаты.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Показанные ниже результаты сгруппированы по каждому опубликованному уникальному значению пола, а количество сгруппированных строк подсчитывается с помощью агрегатной функции COUNT.
Ограничение результатов запроса с помощью HAVING пункт
Не всегда нам захочется выполнять группировку всех данных в данной таблице. Будут моменты, когда мы захотим ограничить наши результаты определенными критериями. В таких случаях мы можем использовать предложение HAVING.
Предположим, мы хотим узнать все годы выпуска для категории фильмов с идентификатором 8. Для достижения наших результатов мы будем использовать следующий скрипт.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Выполнение приведенного выше сценария в MySQL Workbench с Myflixdb дает нам следующие результаты, показанные ниже.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Обратите внимание, что наше предложение GROUP BY затронуло только фильмы с идентификатором категории 8.
Итого
- Предложение SQL GROUP BY используется для группировки строк с одинаковыми значениями.
- Предложение GROUP BY используется вместе с Оператор SQL SELECT.
- Оператор SELECT, используемый в предложении GROUP BY, может содержать только имена столбцов, агрегатные функции, константы и выражения.
- Предложение SQL Have используется для ограничения результатов, возвращаемых предложением GROUP BY.
- Предложение MYSQL GROUP BY используется для сбора данных из нескольких записей и возврата набора записей по одному или нескольким столбцам.