Вступ до пункту GROUP BY у SQL
У випадках, коли нам потрібно згрупувати рядки з однаковим значенням, пункт «За групою» потрапляє на малюнок. Становище GROUP BY - це команда в SQL, яка виконує цю операцію.
Тут важливо пам’ятати, що пункт GROUP BY використовується в операторі SELECT у запиті після використання пункту WHERE.
Синтаксис
Синтаксис для пункту Group By -
SELECT column_name1, column_name2, …
FROM table_name
WHERE conditions
GROUP By column_name1, column_name2, …
ORDER By column_name1, column_name2, …;
Пояснення синтаксису
- Оператор SELECT - запит команди SQL
- table_name - ім'я таблиці бази даних, на яку посилається
- умови - відносяться до умов, що перевіряються
- GROUP BY - пункт групувати однакові рядки
- ЗАМОВЛЕННЯ - завжди використовується за груповою умовою за упорядкуванням рядків у порядку зростання чи спадання. Це необов'язкова умова.
Як пункт GROUP BY працює в SQL?
Для того, щоб зрозуміти роботу Групи за пунктом, скористаємось прикладом. Розглянемо таблицю з іменем EMPLOYEE, яка містить основні дані працівника, такі як ім'я, вік, номер телефону, dob, стать, адреса, ідентифікатор електронної пошти тощо.
Стіл працівників
назва | вік | телефон | Стать | електронною поштою |
Джон | 23 | 123 | Чоловік | |
Може | 22 | 456 | Жіночий | |
Ана | 45 | 644 | Жіночий | |
Горщики | 57 | 3456 | Жіночий | |
Рез | 45 | 456 | Жіночий | |
Засмага | 78 | 2456 | Чоловік | |
Побіг | 34 | 5899 | Чоловік | |
Ван | 55 | 7789 | Жіночий | |
Tung | 32 | 5689 | Чоловік | |
Чунг | 21 | 4678 | Чоловік |
Врахуйте, що ПРАЦІВНИК має близько 10 записів.
Давайте спочатку отримаємо різні значення "статі" з цієї таблиці. Запит, який допоможе нам досягти нашої мети, -
SELECT gender FROM EMPLOYEE;
Це дасть нам такі значення-
Стать |
Чоловік |
Жіночий |
Жіночий |
Жіночий |
Жіночий |
Чоловік |
Чоловік |
Жіночий |
Чоловік |
Чоловік |
Проблема тут полягає в надмірності значень, тобто, як ми бачимо, у таблиці є лише два унікальних значення статі, але вихід не дає нам лише унікальних значень, а всі значення, навіть якщо вони повторюються.
Отже, щоб отримати лише унікальні значення з таблиці, ми будемо використовувати наступний запит -
SELECT gender FROM EMPLOYEE GROUP BY gender;
Результат, який ми отримаємо після виконання цього запиту, буде -
Стать |
Чоловік |
Жіночий |
Group By згрупує всі однакові значення у рядках разом і поверне лише один запис або один рядок для них, як це було з рядками "Чоловічий" та "Жіночий" у таблиці. Це призвело лише до двох унікальних значень, які були присутні у графі "гендер" i, e. Жінки та чоловіки.
Тепер візьмемо ще один приклад таблиці, яка містить дані про відділ, з яким пов'язаний кожен із цих працівників. Ми будемо називати це таблицею Employee_Department.
Таблиця відділу працівників
назва | ход | відділ |
Джон | hod1 | Сервіс |
Може | hod2 | Фінанси |
Ана | hod1 | Сервіс |
Горщики | hod2 | Фінанси |
Рез | hod3 | Техн |
Засмага | hod5 | Підтримка |
Побіг | hod3 | Сервіс |
Ван | hod3 | Техн |
Tung | hod3 | Фінанси |
Чунг | hod5 | HR |
Тож тепер давайте виконаємо наведений нижче запит і шукатимемо результат -
SELECT hod, department FROM Employee_Department GROUP BY hod, department;
Виконання цього запиту отримує такий результат -
ход | відділ |
hod1 | Сервіс |
hod2 | Фінанси |
hod3 | Техн |
hod5 | Підтримка |
hod3 | Сервіс |
hod3 | Фінанси |
hod5 | HR |
Розділ GROUP BY функціонує як у hod, так і у відділі, щоб шукати унікальні рядки у вищезгаданому сценарії. Він перевірить комбінацію ходу та відділу на предмет інших записів ходу та відділу, щоб виявити його унікальність. Якщо ход однаковий, але відділ інший, то цей рядок трактується як унікальний. Якщо ход і відділ однакові для більш ніж одного рядка, то копія запису не створюється і відображається лише один рядок.
ГРУППУ ПО Операційним пунктам
Ми можемо використовувати груповий пункт за допомогою декількох функцій групування та сукупності. Візьмемо декілька прикладів, використовуючи дві вищезгадані таблиці, тобто EMPLOYEE та Employee_Department.
Приклад №1
Отримання кількості чоловіків та жінок у компанії.
SELECT gender, COUNT(`name`) FROM EMPLOYEE GROUP BY gender;
Виконання цього запиту отримує такий результат -
COUNT ("ім'я") | Стать |
5 | Чоловік |
5 | Жіночий |
Приклад №2
Отримання кількості підрозділів у компанії в порядку зменшення кількості.
SELECT department, COUNT(`name`) FROM Employee_Department GROUP BY department ORDER BY COUNT(name) DESC;
Виконання цього запиту отримує такий результат -
COUNT ("ім'я") | відділ |
3 | Сервіс |
3 | Фінанси |
2 | Техн |
1 | Підтримка |
1 | HR |
Приклад №3
Отримання кількості різних підрозділів під одним і тим же ходом у компанії в порядку зменшення кількості.
SELECT hod, department, COUNT(`name`) FROM Employee_Department GROUP BY hod, department ORDER BY COUNT(name) DESC;
Виконання цього запиту отримує такий результат -
COUNT ("ім'я") | ход | відділ |
2 | hod1 | Сервіс |
2 | hod2 | Фінанси |
2 | hod3 | Техн |
1 | hod5 | Підтримка |
1 | hod3 | Сервіс |
1 | hod3 | Фінанси |
1 | hod5 | HR |
Заява HAVING у SQL
Використання пункту HAVING з пунктом Group By буде обмежувати результат запиту до рядків, що мають значення, зазначене в пункті Have.
Розуміння цього на прикладі полегшить -
Приклад №4
SELECT * FROM EMPLOYEE GROUP BY gender HAVING gender = “Female”;
Виконання цього запиту отримує такий результат -
назва | вік | телефон | Стать | електронною поштою |
Може | 22 | 456 | Жіночий | |
Ана | 45 | 644 | Жіночий | |
Горщики | 57 | 3456 | Жіночий | |
Рез | 45 | 456 | Жіночий | |
Ван | 55 | 7789 | Жіночий |
Приклад №5
SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;
Виконання цього запиту отримує такий результат -
назва | ход | відділ |
Може | hod2 | Фінанси |
Горщики | hod2 | Фінанси |
Tung | hod3 | Фінанси |
Висновок
Використовуючи пункт GROUP BY з оператором SELECT, ми можемо групувати рядки з однаковими значеннями разом із використанням агрегативних функцій, констант та виразів.
Рекомендовані статті
Це посібник із пункту GROUP BY у SQL. Тут ми обговорюємо, як «GROUP BY Clause» працює в SQL за допомогою таблиць Приклади та Співробітники. Ви також можете переглянути наступні статті, щоб дізнатися більше -
- SQL Insert Query
- Перегляди SQL
- База даних у SQL
- Операції в SQL