В тази статия за SQL ще научим за клаузата GROUP BY и как да я използваме в SQL. Ще обсъдим също използването на клаузата GROUP BY с клаузата WHERE.
Какво е клаузата GROUP BY?
Клаузата GROUP BY е SQL клауза, използвана в израза SELECT за управление на същите записи на колона в групата с помощта на SQL функции.
Синтаксис на клауза GROUP BY:
SELECT columnname1, columnname2, columnname3 FROM tablename GROUP BY columnname;
Можем да използваме множество колони от таблицата в клаузата GROUP BY.
Има някои стъпки, трябва да се научим как да използваме клаузата GROUP BY в SQL заявката:
1. Създайте нова база данни или използвайте съществуваща база данни, като изберете базата данни с помощта на ключовата дума USE, последвана от името на базата данни.
2. Създайте нова таблица в избраната база данни или можете да използвате вече създадена таблица.
3. Ако таблицата е новосъздадена, вмъкнете записите в новосъздадената база данни с помощта на заявката INSERT и прегледайте вмъкнатите данни с помощта на заявката SELECT без клаузата GROUP BY.
4. Сега сме готови да използваме клаузата GROUP BY в SQL заявките.
Стъпка 1:Създайте нова база данни или използвайте вече създадена база данни.
Вече създадох база данни. Ще използвам съществуващото си създадено име на база данни, Компания.
USE Company;
Компанията е името на базата данни.
Тези, които не са създали база данни, следват следната заявка, за да създадат базата данни:
CREATE DATABASE database_name;
След като създадете базата данни, изберете я с помощта на ключовата дума USE, последвана от името на базата данни.
Стъпка 2:Създайте нова таблица или използвайте вече съществуваща таблица:
Вече създадох таблица. Ще използвам съществуващата таблица с име Employees.
За да създадете новите таблици, следвайте следния синтаксис CREATE TABLE:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Стъпка 3:Вмъкнете записите в новосъздадената таблица с помощта на заявката INSERT и прегледайте записите с помощта на заявката SELECT.
Използвайте следния синтаксис, за да вмъкнете нови записи в таблицата:
INSERT INTO table_name VALUES(value1, value2, value3);
Използвайте следния синтаксис, за да видите записите от таблицата:
SELECT * FROM table_name;
Следната заявка ще покаже записите на служителите:
SELECT * FROM Employees;
Резултатът от горната заявка SELECT е:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# | 5 |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# | 5 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ | ORACLE | 1 |
5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ | ТЕСТВАНЕ | 4 |
5002 | SANKET | ЧАУХАН | 70 000 | ХАЙДЕРАБАД | JAVA | 3 |
5003 | РОШАН | NEHTE | 48500 | ЧАНДИГАР | C# | 5 |
6001 | РАХУЛ | НИКАМ | 54500 | БАНГАЛОР | ТЕСТВАНЕ | 4 |
6002 | АТИС | JADHAV | 60500 | БАНГАЛОР | C# | 5 |
6003 | НИКИТА | ИНГАЛЕ | 65 000 | ХАЙДЕРАБАД | ORACLE | 1 |
Стъпка 4:Готови сме да използваме клаузата GROUP BY в заявките
Сега ще се потопим дълбоко в клаузата GROUP BY с помощта на примери
Пример 1: Напишете заявка за показване на групата записи на служители по град.
SELECT * FROM EMPLOYEES GROUP BY CITY;
Горната заявка показва записите на служителите, където служител от същия град ще се счита за една група. Например, ако в таблицата има записи за 10 служители, където 3 са от град Пуна, 3 са от град Мумбай, 2 са от Хайдерабад и Бангалор, тогава горната заявка ще групира служителя в град Пуна, град Мумбай, като един запис и т.н. .
Резултатът от горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
6001 | РАХУЛ | НИКАМ | 54500 | БАНГАЛОР | ТЕСТВАНЕ | 4 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ | ORACLE | 1 |
5002 | SANKET | ЧАУХАН | 70 000 | ХАЙДЕРАБАД | JAVA | 3 |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# | 5 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# | 5 |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
Както виждаме, записите на служителите са групирани по градове, а записите се показват във възходящ ред по подразбиране.
Пример 2: Напишете заявка за показване на групата записи на служителите по заплата в низходящ ред.
SELECT * FROM EMPLOYEES GROUP BY SALARY DESC;
Горната заявка показва записите на служителите, където служителите с една и съща заплата ще се считат за една група, а записите ще се показват в низходящ ред.
Резултатът от горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
5002 | SANKET | ЧАУХАН | 70 000 | ХАЙДЕРАБАД | JAVA | 3 |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
6003 | НИКИТА | ИНГАЛЕ | 65 000 | ХАЙДЕРАБАД | ORACLE | 1 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# | 5 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# | 5 |
5003 | РОШАН | NEHTE | 48500 | ЧАНДИГАР | C# | 5 |
Както виждаме, записите на служителите са групирани по заплата и записите се показват в низходящ ред, както споменаваме desc в края.
Пример 3: Напишете заявка за показване на група записи на служителите по заплата и град.
SELECT * FROM EMPLOYEES GROUP BY SALARY, CITY;
Горната заявка показва записите на служителите, където служителите с една и съща заплата и град ще се считат за една група.
Например, да предположим, че таблицата има 10 записа на служители. От 10 служители заплатата на 2 служители и града съвпада с други двама служители и останалите шест служители заплата и град е несравним, тогава 6-те служители ще се считат за 6 отделни групи, а 2 служители, които съвпадат с други 2 служители, ще се считат за една група . Накратко ще бъдат сформирани 8 групи.
Резултатът от горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
5003 | РОШАН | NEHTE | 48500 | ЧАНДИГАР | C# | 5 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# | 5 |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
6001 | РАХУЛ | НИКАМ | 54500 | БАНГАЛОР | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# | 5 |
6002 | АТИС | JADHAV | 60500 | БАНГАЛОР | C# | 5 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
6003 | НИКИТА | ИНГАЛЕ | 65 000 | ХАЙДЕРАБАД | ORACLE | 1 |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
5002 | SANKET | ЧАУХАН | 70 000 | ХАЙДЕРАБАД | JAVA | 3 |
Както виждаме, записите на служителите са групирани по заплата и град, а записите се показват във възходящ ред по подразбиране.
Пример 4: Напишете заявка за показване на записите на служителите по град и отдел.
SELECT * FROM EMPLOYEES GROUP BY CITY, DEPARTMENT;
Горната заявка показва записите на служителите, където служителите са в един и същи град, и отделът ще се счита за една група.
Резултатът от горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
6002 | АТИС | JADHAV | 60500 | БАНГАЛОР | C# | 5 |
6001 | РАХУЛ | НИКАМ | 54500 | БАНГАЛОР | ТЕСТВАНЕ | 4 |
5003 | РОШАН | NEHTE | 48500 | ЧАНДИГАР | C# | 5 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
4003 | РУЧИКА | AGARWAL | 60 000 | ДЕЛХИ | ORACLE | 1 |
5001 | АРХИТ | ШАРМА | 55500 | ДЕЛХИ | ТЕСТВАНЕ | 4 |
5002 | SANKET | ЧАУХАН | 70 000 | ХАЙДЕРАБАД | JAVA | 3 |
6003 | НИКИТА | ИНГАЛЕ | 65 000 | ХАЙДЕРАБАД | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50500 | ДЖАЙПУР | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | C# | 5 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | C# | 5 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
1001 | VAIBHAVI | МИШРА | 65500 | ПУНА | ORACLE | 1 |
Както виждаме, записите на служителите са групирани по град и отдел, а записите се показват във възходящ ред по подразбиране.
Пример 5: Напишете заявка за преброяване на списъка на служителите във всеки отдел от таблицата на служителите.
SELECT DEPARTMENT, COUNT(DEPARTMENT) FROM EMPLOYEES GROUP BY DEPARTMENT;
Горната заявка показва броя на служителите във всяка група отдели от отдела. Както шестима служители работят в отдела за човешки ресурси, петима работят в друг отдел.
Резултатът от горната заявка:
ОТДЕЛ | БРОЙ(ОТДЕЛ) |
C# | 4 |
FMW | 3 |
JAVA | 4 |
ORACLE | 4 |
ТЕСТВАНЕ | 3 |
Както виждаме, четирима служители работят в отдел C#, трима работят в отдел FMW и т.н.
Пример 6: Напишете заявка за преброяване на списъка на служителите от всеки град от таблицата на служителите.
SELECT CITY, COUNT(CITY) FROM EMPLOYEES GROUP BY CITY;
Горната заявка показва броя на служителите във всяка градска група по град. Както трима служители работят от град Пуна, четирима работят от друг град и т.н.
Резултатът от горната заявка:
ГРАД | COUNT(CITY) |
БАНГАЛОР | 2 |
ЧАНДИГАРХ | 2 |
ДЕЛХИ | 2 |
ХАЙДЕРАБАД | 2 |
ДЖАЙПУР | 2 |
МУМБАЙ | 3 |
NOIDA | 2 |
ПУНА | 3 |
Както виждаме, двама служители работят от град Бангалор, трима работят от град Мумбай и т.н.
Пример 7: Напишете заявка за сумиране на групата заплати на служителите по града.
SELECT CITY, SUM(SALARY) AS SALARY FROM EMPLOYEES GROUP BY CITY;
Горното се използва за сумиране на заплатите на служителите, групирани по името на града. Например, за служители от един и същи град, тяхната заплата ще бъде сумата и се счита за една група. Използвахме функцията за обобщена сума, последвана от колоната за заплата за добавяне на заплата.
Резултатът от горната заявка:
ГРАД | ЗАПЛАТА |
БАНГАЛОР | 115 000 |
ЧАНДИГАРХ | 104 000 |
ДЕЛХИ | 115500 |
ХАЙДЕРАБАД | 135 000 |
ДЖАЙПУР | 101 000 |
МУМБАЙ | 169 000 |
NOIDA | 114500 |
ПУНА | 186500 |
Както виждаме, сборната заплата в град Бангалор е 115 000, общата заплата в град Чандигарх е 104 000, което е добавянето на различна заплата на служителите, но от града се използва същият подход за всеки град.
Пример 8: Напишете заявка, за да намерите минималната заплата от всеки отдел.
SELECT DEPARTMENT, MIN(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT;
Горната заявка се използва за намиране на минималната заплата на служителя от всеки отдел. Заплатата на един от служителите в отдела Java е 54500, което е най-ниската за целия java отдел. Същите 48500 са най-ниската заплата, изплащана на служителя в C# отдела.
Резултатът от горната заявка:
ОТДЕЛ | MIN(ЗАЛАТА) |
C# | 48500 |
FMW | 50500 |
JAVA | 54500 |
ORACLE | 55500 |
ТЕСТВАНЕ | 54500 |
Както виждаме, 50500 е най-ниската заплата, изплащана на един от служителите в отдел FMW, 55500 е най-ниската заплата, изплатена на един от служителите в отдела ORACLE.
Пример 9: Напишете заявка, за да намерите минималната заплата за всеки град.
SELECT CITY, MAX(SALARY) FROM EMPLOYEES GROUP BY CITY;
Горната заявка се използва за намиране на максималната заплата от всеки град. Един от служителите от заплатата на град Пуна е 65 500, което е най-високото в целия град Пуна, същите 60 500 е най-високата заплата, изплащана на служителя в град Мумбай.
Резултатът от горната заявка:
ГРАД | МАКС.(ЗАЛАТА) |
БАНГАЛОР | 60500 |
ЧАНДИГАРХ | 55500 |
ДЕЛХИ | 60 000 |
ХАЙДЕРАБАД | 70 000 |
ДЖАЙПУР | 50500 |
МУМБАЙ | 60500 |
NOIDA | 60 000 |
ПУНА | 65500 |
Както виждаме, 50500 е най-високата заплата, изплащана на един от служителите в град Джайпур, 55500 е най-високата заплата, изплатена на един от служителите в град Чандигарх.