Что такое SQL Group by Clause?
Предложение GROUP BY - это команда SQL, которая используется для группировки строк с одинаковыми значениями . Предложение GROUP BY используется в операторе SELECT. При желании он используется вместе с агрегатными функциями для создания сводных отчетов из базы данных.
Вот что он делает, обобщая данные из базы данных.
Запросы, содержащие предложение GROUP BY, называются сгруппированными запросами и возвращают только одну строку для каждого сгруппированного элемента.
Синтаксис SQL GROUP BY
Теперь, когда мы знаем, что такое предложение SQL GROUP BY, давайте посмотрим на синтаксис для базовой группы по запросу.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
ЗДЕСЬ
- «Операторы SELECT…» - это стандартный запрос команды SQL SELECT.
- « GROUP BY имя_столбца1» - это предложение, которое выполняет группировку на основе имя_столбца1.
- «[, имя_столбца2,…]» не является обязательным; представляет имена других столбцов, когда группировка выполняется более чем по одному столбцу.
- «[HAVING condition]» не является обязательным; он используется для ограничения строк, затронутых предложением GROUP BY. Это похоже на предложение WHERE.
Группировка с использованием одного столбца
Чтобы помочь понять эффект предложения SQL Group By, давайте выполним простой запрос, который возвращает все записи пола из таблицы members.
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 |
Приведенный выше результат имеет много дубликатов.
Давайте выполним тот же запрос, используя group by в SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Выполнение вышеуказанного сценария в рабочей среде MySQL для 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 для 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 против 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 используется для сбора данных из нескольких записей и возвращаемых записей, установленных одним или несколькими столбцами.