Что такое группировка по пунктам?
Предложение GROUP BY — это команда SQL, которая используется для группировки строк с одинаковыми значениями .
Предложение GROUP BY используется в операторе SELECT. Опционально оно используется в сочетании с агрегатными функциями для создания сводных отчетов из базы данных.
Вот что он делает, суммируя данные из базы данных.
Запросы, содержащие предложение GROUP BY, называются сгруппированными запросами и возвращают только одну строку для каждого сгруппированного элемента.
Синтаксис GROUP BY
Теперь, когда мы знаем, что такое предложение GROUP By, давайте посмотрим на синтаксис для базовой группы по запросу.
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];
ВОТ
- «Операторы SELECT …» — это стандартный запрос команды SQL SELECT.
- « GROUP BY column_name1 » — это предложение, которое выполняет группировку на основе column_name1.
- «[, column_name2, …]» необязательно; представляет другие имена столбцов, когда группировка выполняется по нескольким столбцам.
- «[HAVING условие]» необязательно; он используется для ограничения строк, затронутых предложением GROUP BY. Это похоже на предложение WHERE.
Группировка с использованием одного столбца
Чтобы понять влияние предложения 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 Workbench против Myflixdb дает нам следующие результаты.
gender Female Male
Обратите внимание, только два результата были возвращены. Это потому, что у нас есть только два типа пола: мужской и женский. Предложение GROUP BY сгруппировало всех «мужских» членов вместе и вернуло только одну строку для него. То же самое было и с «женщинами».
Группировка с использованием нескольких столбцов
Предположим, что мы хотим получить список фильмов 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 —
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.
Резюме
- Предложение GROUP BY используется для группировки строк с одинаковыми значениями.
- Предложение GROUP BY используется вместе с оператором SQL SELECT.
- Оператор SELECT, используемый в предложении GROUP BY, может использоваться только с именами столбцов, агрегатными функциями, константами и выражениями.
- Предложение HAVING используется для ограничения результатов, возвращаемых предложением GROUP BY.