Що таке речення 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 column_name1" - це речення, яке виконує групування на основі ім'я_ столбця1.
- "[, ім'я_столбця2, ...]" необов'язково; представляє інші імена стовпців, коли групування здійснюється за кількома стовпцями.
- "[HAVING condition]" необов’язковий; він використовується для обмеження рядків, на які впливає речення 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 |
Наведений вище результат має багато дублікатів.
Давайте виконаємо той самий запит, використовуючи 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.
Резюме
- Застереження GROUP BY SQL використовується для групування рядків з однаковими значеннями.
- Застереження GROUP BY використовується разом із оператором SQL SELECT.
- Оператор SELECT, який використовується в реченні GROUP BY, може використовуватися лише з іменами стовпців, агрегатними функціями, константами та виразами.
- Застереження SQL, що використовується, обмежує результати, що повертаються реченням GROUP BY.
- Речення MYSQL GROUP BY використовується для збору даних із декількох записів та повернених записів, встановлених одним або кількома стовпцями.