Въведение в клаузата GROUP BY в SQL
За случаите, когато трябва да групираме редовете с една и съща стойност Клауза Group By влиза в картината. Клаузата GROUP BY е команда в SQL, която ще извърши тази операция.
Важното, което трябва да запомните тук, е, че клаузата GROUP BY се използва в оператора SELECT в заявката след използваната клауза WHERE.
Синтаксис
Синтаксисът за група по клауза е -
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 | Женски пол | |
Res | 45 | 456 | Женски пол | |
тен | 78 | 2456 | Мъжки пол | |
Ран | 34 | 5899 | Мъжки пол | |
Уан | 55 | 7789 | Женски пол | |
Tung | 32 | 5689 | Мъжки пол | |
Chung | 21 | 4678 | Мъжки пол |
Помислете, че EMPLOYEE има около 10 записа.
Нека първо вземем различните стойности на „пол“ от тази таблица. Въпросът, който ще ни помогне да постигнем целта си, е -
SELECT gender FROM EMPLOYEE;
Това ще ни даде следните стойности-
пол |
Мъжки пол |
Женски пол |
Женски пол |
Женски пол |
Женски пол |
Мъжки пол |
Мъжки пол |
Женски пол |
Мъжки пол |
Мъжки пол |
Проблемът тук е съкращаването на стойностите, т.е. както виждаме, има само две уникални стойности на пола в таблицата, но изходът не ни дава само уникалните стойности, но всички стойности, дори и да са повтарящи се.
Така че, за да получим само уникалните стойности от таблицата, ще използваме следното запитване -
SELECT gender FROM EMPLOYEE GROUP BY gender;
Резултатът, който получаваме след изпълнение на тази заявка, ще бъде -
пол |
Мъжки пол |
Женски пол |
The Group By ще групира едни и същи стойности в редовете заедно и ще върне само един запис или един ред за тях, както направи с редовете „Male“ и „Female“ в таблицата. Това доведе до само две уникални стойности, които присъстваха в графата „пол“ i, e. Жена и мъж.
Сега, нека да вземем друг пример на таблица, която съдържа подробности за отдела, с който е свързан всеки един от тези служители. Ще наречем това таблица на Employee_Department.
Таблица на служителите
име | кофа за въглища | отдел |
Джон | hod1 | Обслужване |
Може | hod2 | Финанси |
Ана | hod1 | Обслужване |
тенджери | hod2 | Финанси |
Res | hod3 | Tech |
тен | hod5 | поддържа |
Ран | hod3 | Обслужване |
Уан | hod3 | Tech |
Tung | hod3 | Финанси |
Chung | hod5 | HR |
Затова сега нека изпълним заявката по-долу и да потърсим резултата -
SELECT hod, department FROM Employee_Department GROUP BY hod, department;
Изпълнението на тази заявка извлича следния резултат -
кофа за въглища | отдел |
hod1 | Обслужване |
hod2 | Финанси |
hod3 | Tech |
hod5 | поддържа |
hod3 | Обслужване |
hod3 | Финанси |
hod5 | HR |
Клаузата GROUP BY функционира както на hod, така и на отдела, за да търси уникалните редове в гореспоменатия сценарий. Той ще провери комбинацията от hod и отдел спрямо други записи на hod и отдела, за да установи неговата уникалност. Ако ходът е същият, но отделът е различен, тогава този ред се третира като уникален. Ако hod и отделът са еднакви за повече от един ред, тогава дублиращият запис не се създава и се показва само един ред.
Групиране по операции с клаузи
Можем да използваме клауза Group By с няколко функции за групиране и агрегиране. Нека вземем няколко примера, използвайки горните две споменати таблици, т.е. 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 | Tech |
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 | Tech |
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 | Женски пол | |
Res | 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