W tym artykule dotyczącym SQL dowiemy się o klauzuli GROUP BY oraz o tym, jak jej używać w SQL. Omówimy również użycie klauzuli GROUP BY z klauzulą WHERE.
Co to jest klauzula GROUP BY?
Klauzula GROUP BY jest klauzulą SQL używaną w instrukcji SELECT do zarządzania tymi samymi rekordami kolumny w grupie za pomocą funkcji SQL.
Składnia klauzuli GROUP BY:
SELECT columnname1, columnname2, columnname3 FROM tablename GROUP BY columnname;
Możemy użyć wielu kolumn z tabeli w klauzuli GROUP BY.
Jest kilka kroków, musimy nauczyć się, jak używać klauzuli GROUP BY w zapytaniu SQL:
1. Utwórz nową bazę danych lub użyj istniejącej bazy danych, wybierając bazę danych za pomocą słowa kluczowego USE, po którym następuje nazwa bazy danych.
2. Utwórz nową tabelę w wybranej bazie danych lub możesz użyć już utworzonej tabeli.
3. Jeśli tabela jest nowo utworzona, wstaw rekordy w nowo utworzonej bazie danych za pomocą zapytania INSERT i wyświetl wstawione dane za pomocą zapytania SELECT bez klauzuli GROUP BY.
4. Teraz jesteśmy gotowi do użycia klauzuli GROUP BY w zapytaniach SQL.
Krok 1:Utwórz nową bazę danych lub użyj już utworzonej bazy danych.
Stworzyłem już bazę danych. Użyję nazwy mojej istniejącej utworzonej bazy danych, Firma.
USE Company;
Firma to nazwa bazy danych.
Ci, którzy nie utworzyli bazy danych, wykonaj poniższe zapytanie, aby utworzyć bazę danych:
CREATE DATABASE database_name;
Po utworzeniu bazy danych wybierz bazę danych, używając słowa kluczowego USE, a następnie nazwy bazy danych.
Krok 2:Utwórz nową tabelę lub użyj już istniejącej:
Stworzyłem już tabelę. Użyję istniejącej tabeli o nazwie Pracownicy.
Aby utworzyć nowe tabele, postępuj zgodnie z poniższą składnią CREATE TABLE:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Krok 3:wstaw rekordy do nowo utworzonej tabeli za pomocą zapytania INSERT i wyświetl rekordy za pomocą zapytania SELECT.
Użyj następującej składni, aby wstawić nowe rekordy do tabeli:
INSERT INTO table_name VALUES(value1, value2, value3);
Użyj następującej składni, aby wyświetlić rekordy z tabeli:
SELECT * FROM table_name;
Następujące zapytanie wyświetli rekordy pracowników:
SELECT * FROM Employees;
Dane wyjściowe powyższego zapytania SELECT to:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | WYROCZNIA | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOWANIE | 4 |
5002 | KOSZULKA | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
5003 | ROSHAN | NEHTE | 48500 | CZANDIGAR | C# | 5 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | TESTOWANIE | 4 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | WYROCZNIA | 1 |
Krok 4:Jesteśmy gotowi do użycia klauzuli GROUP BY w zapytaniach
Przyjrzymy się teraz klauzuli GROUP BY za pomocą przykładów
Przykład 1: Napisz zapytanie, aby wyświetlić rekordy pracowników pogrupowane według miasta.
SELECT * FROM EMPLOYEES GROUP BY CITY;
Powyższe zapytanie wyświetla rekordy pracowników, w których pracownik z tego samego miasta będzie uważany za jedną grupę. Na przykład, jeśli w tabeli znajduje się 10 rekordów pracowników, gdzie 3 pochodzą z miasta Pune, 3 z Bombaju, 2 z Hyderabadu i Bangalore, to powyższe zapytanie zgrupuje pracownika miasta Pune Pracownik miasta Bombaju jako jeden rekord i tak dalej .
Wynik powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | TESTOWANIE | 4 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | WYROCZNIA | 1 |
5002 | KOSZULKA | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# | 5 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA | 1 |
Jak widać, rekordy pracowników są pogrupowane według miasta, a domyślnie rekordy są wyświetlane w kolejności rosnącej.
Przykład 2: Napisz zapytanie, aby wyświetlić grupę rekordów pracowników według wynagrodzenia w porządku malejącym.
SELECT * FROM EMPLOYEES GROUP BY SALARY DESC;
Powyższe zapytanie wyświetla rekordy pracowników, w których pracownicy z tym samym wynagrodzeniem będą uważani za jedną grupę, a rekordy będą wyświetlane w kolejności malejącej.
Wyniki powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
5002 | KOSZULKA | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA | 1 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | WYROCZNIA | 1 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# | 5 |
5003 | ROSHAN | NEHTE | 48500 | CZANDIGAR | C# | 5 |
Jak widzimy, rekordy pracowników są pogrupowane według wynagrodzenia, a rekordy są wyświetlane w kolejności malejącej, o czym wspominamy na końcu.
Przykład 3: Napisz zapytanie, aby wyświetlić grupę rekordów pracowników według wynagrodzenia i miasta.
SELECT * FROM EMPLOYEES GROUP BY SALARY, CITY;
Powyższe zapytanie wyświetla rekordy pracowników, w których pracownicy z tym samym wynagrodzeniem i miastem będą uważani za jedną grupę.
Załóżmy na przykład, że tabela zawiera 10 rekordów pracowników. Od 10 pracowników wynagrodzenie 2 pracowników i dopasowanie miasta z pozostałymi dwoma pracownikami i reszta wynagrodzenia sześciu pracowników i miasto jest niezrównane, wówczas 6 pracowników zostanie uznanych za 6 oddzielnych grup, a 2 pracowników, którzy pasują do pozostałych 2 pracowników, będzie uważanych za jedną grupę . W skrócie zostanie utworzonych 8 grup.
Wyniki powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
5003 | ROSHAN | NEHTE | 48500 | CZANDIGAR | C# | 5 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# | 5 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | WYROCZNIA | 1 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA | 1 |
5002 | KOSZULKA | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
Jak widać, rekordy pracowników są pogrupowane według wynagrodzenia i miasta, a domyślnie rekordy wyświetlane są w kolejności rosnącej.
Przykład 4: Napisz zapytanie, aby wyświetlić rekordy pracowników według miasta i działu.
SELECT * FROM EMPLOYEES GROUP BY CITY, DEPARTMENT;
Powyższe zapytanie wyświetla rekordy pracowników, w których pracownicy znajdują się w tym samym mieście, a dział zostanie uznany za jedną grupę.
Wyniki powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | TESTOWANIE | 4 |
5003 | ROSHAN | NEHTE | 48500 | CZANDIGAR | C# | 5 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | WYROCZNIA | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | TESTOWANIE | 4 |
5002 | KOSZULKA | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50500 | JAIPUR | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | C# | 5 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | WYROCZNIA | 1 |
Jak widać, rekordy pracowników są pogrupowane według miasta i działu, a rekordy są domyślnie wyświetlane w kolejności rosnącej.
Przykład 5: Napisz zapytanie, aby policzyć listę pracowników w każdym dziale z tabeli pracowników.
SELECT DEPARTMENT, COUNT(DEPARTMENT) FROM EMPLOYEES GROUP BY DEPARTMENT;
Powyższe zapytanie wyświetla liczbę pracowników w każdej grupie działów według działu. Podobnie jak sześciu pracowników pracuje w dziale HR, pięciu pracuje w innym dziale.
Wyniki powyższego zapytania:
DZIAŁ | LICZBA (DZIAŁ) |
C# | 4 |
FMW | 3 |
JAVA | 4 |
WYROCZNIA | 4 |
TESTOWANIE | 3 |
Jak widać, czterech pracowników pracuje w Dziale C#, trzech w Dziale FMW itd.
Przykład 6: Napisz zapytanie, aby policzyć listę pracowników z każdego miasta z tabeli pracowników.
SELECT CITY, COUNT(CITY) FROM EMPLOYEES GROUP BY CITY;
Powyższe zapytanie wyświetla liczbę pracowników w każdej grupie miast według miasta. Na przykład trzech pracowników pracuje z miasta Pune, czterech z innego miasta i tak dalej.
Wynik powyższego zapytania:
MIASTO | LICZBA(MIASTO) |
BANGALUR | 2 |
CZANDIGAR | 2 |
DELHI | 2 |
HYDERABAD | 2 |
JAIPUR | 2 |
MUMBAJ | 3 |
NOIDA | 2 |
PUNE | 3 |
Jak widzimy, dwóch pracowników pracuje z miasta Bangalore, trzech pracowników z miasta Bombaju i tak dalej.
Przykład 7: Napisz zapytanie, aby zsumować grupę wynagrodzeń pracowników według miasta.
SELECT CITY, SUM(SALARY) AS SALARY FROM EMPLOYEES GROUP BY CITY;
Powyższe służy do sumowania wynagrodzeń pracowników pogrupowanych według nazwy miasta. Na przykład dla pracowników z tego samego miasta ich wynagrodzenie będzie sumą i będzie traktowane jako jedna grupa. Do dodania wynagrodzenia użyliśmy funkcji sumy zbiorczej, a następnie kolumny wynagrodzenia.
Wyniki powyższego zapytania:
MIASTO | WYNAGRODZENIE |
BANGALUR | 115000 |
CZANDIGAR | 104000 |
DELHI | 115500 |
HYDERABAD | 135000 |
JAIPUR | 101000 |
MUMBAJ | 169000 |
NOIDA | 114500 |
PUNE | 186500 |
Jak widać, pensja w mieście Bangalore wynosi 115000, pensja w mieście Chandigarh to 104000, co stanowi dodanie innej pensji pracownika, ale z miasta stosuje się to samo podejście dla każdego miasta.
Przykład 8: Napisz zapytanie, aby znaleźć minimalną pensję z każdego działu.
SELECT DEPARTMENT, MIN(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT;
Powyższe zapytanie służy do znalezienia minimalnego wynagrodzenia pracownika z każdego działu. Pensja jednego z pracowników działu Java to 54500, czyli najniższa w całym dziale Java. To samo 48500 to najniższa pensja wypłacana pracownikowi w dziale C#.
Wyniki powyższego zapytania:
DZIAŁ | MIN(WYNAGRODZENIE) |
C# | 48500 |
FMW | 50500 |
JAVA | 54500 |
WYROCZNIA | 55500 |
TESTOWANIE | 54500 |
Jak widzimy, 50500 to najniższa pensja wypłacana jednemu z pracowników działu FMW, 55500 to najniższa pensja wypłacana jednemu z pracowników działu ORACLE.
Przykład 9: Napisz zapytanie, aby znaleźć minimalną pensję z każdego miasta.
SELECT CITY, MAX(SALARY) FROM EMPLOYEES GROUP BY CITY;
Powyższe zapytanie służy do znalezienia maksymalnej pensji z każdego miasta. Pensja jednego z pracowników miasta Pune wynosi 65500, co jest najwyższą pensją w całym mieście Pune, tak samo 60500 to najwyższa pensja wypłacana pracownikowi w mieście Bombaj.
Wynik powyższego zapytania:
MIASTO | MAKS(WYNAGRODZENIE) |
BANGALUR | 60500 |
CZANDIGAR | 55500 |
DELHI | 60000 |
HYDERABAD | 70000 |
JAIPUR | 50500 |
MUMBAJ | 60500 |
NOIDA | 60000 |
PUNE | 65500 |
Jak widzimy, 50500 to najwyższa pensja wypłacana jednemu z pracowników w mieście Jaipur, 55500 to najwyższa pensja wypłacana jednemu z pracowników w mieście Chandigarh.