Klauzule GROUP BY i ORDER BY w SQL służą do porządkowania danych uzyskanych przez zapytania SQL. Ważną różnicą między klauzulą GROUP BY a klauzulą ORDER BY jest to, że klauzula GROUP BY jest stosowana, gdy chcemy użyć funkcji agregującej w zapytaniu SQL w więcej niż jednym zestawie wierszy. Natomiast klauzula ORDER BY jest stosowana, gdy chcemy otrzymać dane uzyskane przez zapytanie w posortowanej kolejności. Zanim przejdziemy do wykresów porównawczych, najpierw zrozumiemy te klauzule SQL.
GRUPA WEDŁUG klauzuli
Instrukcja GROUP BY w SQL używa zapytań do porządkowania danych w obrębie wartości atrybutów. Zwykle używamy klauzuli GROUP BY z instrukcją SELECT. Klauzule GROUP BY musimy zawsze umieszczać po klauzuli WHERE. Dodatkowo jest również umieszczany przed klauzulą ORDER BY.
Często możemy użyć klauzuli GROUP BY z funkcjami agregującymi, takimi jak SUM, AVG, MIN, MAX i COUNT, aby uzyskać dane wyjściowe z bazy danych. Zapytanie dla klauzuli GROUP BY jest zapytaniem grupowym i zwraca jeden wiersz dla każdego zgrupowanego obiektu.
Poniżej znajduje się składnia do używania klauzuli GROUP BY w zapytaniu SQL
SELECT COLUMNNAME, FUNCTION(COLUMNNAME) FROM TABLENAME WHERE CONDITION GROUP BY COLUMNNAME;
Zrozummy klauzulę GROUP BY na podstawie kilku przykładów. Rozważ poniższe tabele wraz z podanymi rekordami.
Tabela:Pracownicy
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY | ROBOCZE_GODZINY | PŁEĆ |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 | 12 | F |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 | 9 | M |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 | 10 | M |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 | 10 | F |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 | 12 | M |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 | 9 | F |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 | 9 | F |
3002 | ANUJA | GDZIE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 | 12 | M |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 | 10 | M |
Przykład 1: Załóżmy, że dla powyższych danych chcemy poznać sumę wynagrodzeń pracowników w danym mieście. W tym celu wykonamy poniższe zapytanie w następujący sposób:
SELECT CITY, SUM(SALARY) FROM EMPLOYEES GROUP BY CITY;
To zapytanie początkowo utworzyło wynik, który pogrupował miasto. Następnie SUM funkcja jest wykonywana na każdej grupie miast, a na koniec otrzymamy pożądane wyniki, jak pokazano poniżej:
Przykład 2: Załóżmy, że dla powyższych danych chcemy poznać maksymalne wynagrodzenie pracowników w danym dziale. W tym celu wykonamy poniższe zapytanie w następujący sposób:
SELECT DEPARTMENT, MAX(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT;
To zapytanie początkowo utworzyło wynik, który pogrupował dział. Następnie MAX funkcja jest wykonywana na każdej grupie działu, a na koniec otrzymamy pożądane wyniki, jak pokazano poniżej:
klauzula ZAMÓW WEDŁUG
Klauzula GROUP BY i klauzula ORDER BY mogą być używane z instrukcją SELECT. W zapytaniach SQL użyliśmy klauzuli ORDER BY, aby posortować rekordy zwrócone przez zapytanie w kolejności rosnącej lub malejącej. Gdybyśmy nie wspomnieli o kolejności sortowania, cały wynik byłby domyślnie posortowany w kolejności rosnącej.
Poniżej znajduje się składnia użycia klauzuli ORDER BY w zapytaniu SQL
SELECT * FROM TABLENAME ORDER BY [ASC | DESC];
Zrozummy klauzulę ORDER BY za pomocą kilku przykładów. Rozważ poniższe tabele wraz z podanymi rekordami.
Tabela:Pracownicy
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY | ROBOCZE_GODZINY | PŁEĆ |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 | 12 | F |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 | 9 | M |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 | 10 | M |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 | 10 | F |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 | 12 | M |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 | 9 | F |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 | 9 | F |
3002 | ANUJA | GDZIE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 | 12 | M |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 | 10 | M |
Przykład 1: Załóżmy, że chcemy uporządkować wynik w kolejności posortowanej, rosnącej lub malejącej, na podstawie kolumny z imieniem. W takim przypadku chcielibyśmy użyć klauzuli ORDER BY, aby uzyskać wynik. W tym celu wykonamy poniższe zapytanie w następujący sposób:
SELECT * FROM EMPLOYEES ORDER BY FIRST_NAME ASC;
Kluczowa różnica między GROUP BY i ORDER BY
Poniżej znajdują się punkty, które odróżniają klauzule GROUP BY i ORDER BY:
- Instrukcja GROUP BY w SQL służy do grupowania rekordów na podstawie podobnej wartości w określonej kolumnie. Z drugiej strony, klauzula ORDER BY w SQL jest używana do sortowania wyświetlanych wyników w kolejności rosnącej lub malejącej.
- Podczas wykonywania zapytania przy użyciu klauzuli GROUP BY w zapytaniu SQL obowiązkowe jest użycie funkcji agregującej. Z drugiej strony, używając klauzuli ORDER BY w SQ, użycie funkcji agregującej nie jest obowiązkowe.
- Klauzula GROUP BY jest zawsze umieszczana w zapytaniu SQL po klauzuli WHERE, ale przed klauzulą ORDER BY. Z drugiej strony klauzula ORDER BY jest zawsze umieszczana po klauzuli GROUP BY.
Wykres porównawczy
SR.NIE | GRUPUJ WG | ZAMÓW PRZEZ |
1 | Klauzula GROUP BY służy do grupowania wierszy o podobnych wartościach. | Klauzula ORDER BY służy do sortowania wyników w kolejności malejącej lub rosnącej |
2 | Kontroluje prezentację wierszy | Kontroluje prezentację kolumn |
3 | Klauzula GROUP BY jest zawsze umieszczana przed klauzulą ORDER BY. | Klauzula ORDER BY jest zawsze umieszczana po klauzuli GROUP BY. |
4 | Używanie funkcji agregującej jest obowiązkowe | Używanie funkcji agregującej nie jest obowiązkowe |
5 | Atrybut nie może znajdować się w funkcji agregującej | w instrukcji GROUP BY. Atrybut może znajdować się pod funkcją agregującą w instrukcji ORDER BY. |