Klauzule GROUP BY a klauzule ORDER BY v SQL se používají k uspořádání dat získaných SQL dotazy. Důležitý rozdíl mezi klauzulí GROUP BY a klauzulí ORDER BY je v tom, že klauzule GROUP BY se používá, když chceme použít agregační funkci v dotazu SQL na více než jedné sadě řádků. Naproti tomu klauzule ORDER BY se aplikuje, když chceme data získaná dotazem přijímat v seřazeném pořadí. Než přejdeme ke srovnávacím grafům, nejprve porozumíme těmto klauzulům SQL.
Klauzule GROUP BY
Příkaz GROUP BY v SQL používá dotazy k uspořádání dat v rámci hodnot atributů. Obvykle používáme klauzuli GROUP BY s příkazem SELECT. Klauzuli GROUP BY musíme vždy umístit za klauzuli WHERE. Kromě toho je také tempomat před klauzulí ORDER BY.
K vytvoření výstupu z databáze můžeme často použít klauzuli GROUP BY s agregačními funkcemi jako SUM, AVG, MIN, MAX a COUNT. Dotaz na klauzuli GROUP BY je seskupený dotaz a pro každý seskupený objekt vrací jeden řádek.
Níže je uvedena syntaxe pro použití klauzule GROUP BY v dotazu SQL
SELECT COLUMNNAME, FUNCTION(COLUMNNAME) FROM TABLENAME WHERE CONDITION GROUP BY COLUMNNAME;
Pojďme pochopit klauzuli GROUP BY pomocí několika příkladů. Zvažte následující tabulky spolu s danými záznamy.
Tabulka:Zaměstnanci
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE | PRACOVNÍ_HODINY | GENDER |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 | 10 | M |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 | 10 | F |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 | 12 | M |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 | 9 | F |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 | 9 | F |
3002 | ANUJA | KDE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 | 12 | M |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 | 10 | M |
Příklad 1: Předpokládejme, že pro výše uvedená data chceme znát celkovou mzdu zaměstnanců v konkrétním městě. Za tímto účelem provedeme níže uvedený dotaz takto:
SELECT CITY, SUM(SALARY) FROM EMPLOYEES GROUP BY CITY;
Tento dotaz původně vytvořil výsledek, který seskupil město. Dále SUM funkce se provádí u každé skupiny měst a nakonec získáme požadované výsledky, jak je uvedeno níže:
Příklad 2: Předpokládejme, že pro výše uvedená data chceme znát maximální plat zaměstnanců v konkrétním oddělení. Za tímto účelem provedeme níže uvedený dotaz takto:
SELECT DEPARTMENT, MAX(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT;
Tento dotaz původně vytvořil výsledek, který seskupil oddělení. Dále MAX Funkce se provádí na každé skupině oddělení a nakonec získáme požadované výsledky, jak je uvedeno níže:
OBJEDNAT PODLE klauzule
Klauzule GROUP BY a klauzule ORDER BY lze použít s příkazem SELECT. V SQL dotazech jsme použili klauzuli ORDER BY k řazení záznamů vrácených dotazem ve vzestupném nebo sestupném pořadí. Pokud bychom nezmínili pořadí řazení, celý výsledek by se ve výchozím nastavení seřadil vzestupně.
Níže je uvedena syntaxe pro použití klauzule ORDER BY v dotazu SQL
SELECT * FROM TABLENAME ORDER BY [ASC | DESC];
Pojďme pochopit klauzuli ORDER BY pomocí několika příkladů. Zvažte následující tabulky spolu s danými záznamy.
Tabulka:Zaměstnanci
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE | PRACOVNÍ_HODINY | GENDER |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 | 9 | M |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 | 10 | M |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 | 10 | F |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 | 12 | M |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 | 9 | F |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 | 9 | F |
3002 | ANUJA | KDE | 50500 | JAIPUR | FMW | 2 | 9 | F |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 | 12 | M |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 | 10 | M |
Příklad 1: Předpokládejme, že chceme uspořádat výsledek v seřazeném pořadí, buď vzestupně nebo sestupně, na základě sloupce křestního jména. V takovém případě bychom k výsledku chtěli použít klauzuli ORDER BY. Za tímto účelem provedeme níže uvedený dotaz takto:
SELECT * FROM EMPLOYEES ORDER BY FIRST_NAME ASC;
Klíčový rozdíl mezi GROUP BY a ORDER BY
Níže jsou uvedeny body, které odlišují klauzule GROUP BY a ORDER BY:
- Příkaz GROUP BY v SQL se používá k seskupení záznamů na základě podobné hodnoty v konkrétním sloupci. Na druhou stranu klauzule ORDER BY v SQL se používá k řazení výsledků zobrazení ve vzestupném nebo sestupném pořadí.
- Při provádění dotazu pomocí klauzule GROUP BY v dotazu SQL je povinné použít agregační funkci. Na druhou stranu, při použití klauzule ORDER BY v SQ není povinné používat agregační funkci.
- Klauzule GROUP BY je v dotazu SQL vždy umístěna za klauzuli WHERE, ale před klauzulí ORDER BY. Na druhou stranu klauzule ORDER BY je vždy umístěna za klauzulí GROUP BY.
Srovnávací tabulka
SR.NO | GROUP BY | OBJEDNAT PODLE |
1 | Klauzule GROUP BY se používá k seskupení řádků s podobnými hodnotami. | Klauzule ORDER BY se používá k řazení výsledků v sestupném nebo vzestupném pořadí |
2 | Ovládá prezentaci řádků | Ovládá prezentaci sloupců |
3 | Klauzule GROUP BY je vždy umístěna před klauzulí ORDER BY. | Klauzule ORDER BY je vždy umístěna za klauzuli GROUP BY. |
4 | Je povinné používat agregační funkci | Není povinné používat agregační funkci |
5 | Atribut nemůže být pod agregační funkcí | v příkazu GROUP BY. Atribut může být pod agregační funkcí v příkazu ORDER BY. |