Клаузата GROUP BY и клаузата ORDER BY в SQL се използват за подреждане на данни, получени чрез SQL заявки. Важната разлика между клаузата GROUP BY и клаузата ORDER BY е, че клаузата GROUP BY се прилага, когато искаме да използваме агрегатна функция в SQL заявка за повече от един набор от редове. Обратно, клаузата ORDER BY се прилага, когато искаме да получим данните, получени от заявката, в сортирания ред. Преди да преминем към сравнителни диаграми, първо ще разберем тези SQL клаузи.
Клауза GROUP BY
Инструкцията GROUP BY в SQL използва заявки за подреждане на данни в стойностите на атрибута. Обикновено използваме клаузата GROUP BY с израза SELECT. Винаги трябва да поставяме клаузата GROUP BY след клаузата WHERE. Освен това, той също се поставя пред клаузата ORDER BY.
Често можем да използваме клаузата GROUP BY с агрегатни функции като SUM, AVG, MIN, MAX и COUNT, за да произведем изход от базата данни. Заявката за клаузата GROUP BY е групирана заявка и връща един ред за всеки групиран обект.
По-долу е синтаксисът за използване на клаузата GROUP BY в SQL заявка
SELECT COLUMNNAME, FUNCTION(COLUMNNAME) FROM TABLENAME WHERE CONDITION GROUP BY COLUMNNAME;
Нека разберем клаузата GROUP BY с помощта на няколко примера. Разгледайте следните таблици заедно с дадените записи.
Таблица:Служители
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID | WORKING_HOURS | POL |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 | 9 | М |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 | 10 | М |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 | 10 | F |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 | 12 | М |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 | 9 | F |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 | 9 | F |
3002 | ANUJA | КЪДЕ | 50500 | ДЖАЙПУР | FMW | 2 | 9 | F |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 | 12 | М |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 | 10 | М |
Пример 1: Да предположим, че искаме да знаем общата заплата на служителите в конкретен град за горните данни. За да направим това, ще изпълним заявката по-долу, както следва:
SELECT CITY, SUM(SALARY) FROM EMPLOYEES GROUP BY CITY;
Тази заявка първоначално формира резултат, който е групирал града. Следва SUM функцията се изпълнява за всяка група градове и накрая ще получим желаните резултати, както е показано по-долу:
Пример 2: Да предположим, че искаме да знаем максималната заплата на служителите в конкретен отдел за горните данни. За да направим това, ще изпълним заявката по-долу, както следва:
SELECT DEPARTMENT, MAX(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT;
Тази заявка първоначално формира резултат, който е групирал отдела. След това MAX функция се изпълнява за всяка група от отдела и накрая ще получим желаните резултати, както е показано по-долу:
Клауза ORDER BY
Клаузата GROUP BY и клаузата ORDER BY могат да се използват с израза SELECT. В SQL заявките използвахме клаузата ORDER BY, за да сортираме записите, върнати от заявката, във възходящ или низходящ ред. Ако не споменем реда на сортиране, целият резултат ще бъде сортиран по подразбиране във възходящ ред.
По-долу е синтаксисът за използване на клаузата ORDER BY в SQL заявка
SELECT * FROM TABLENAME ORDER BY [ASC | DESC];
Нека разберем клаузата ORDER BY с помощта на няколко примера. Разгледайте следните таблици заедно с дадените записи.
Таблица:Служители
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID | WORKING_HOURS | POL |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 | 12 | F |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 | 9 | М |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 | 10 | М |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 | 10 | F |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 | 12 | М |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 | 9 | F |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 | 9 | F |
3002 | ANUJA | КЪДЕ | 50500 | ДЖАЙПУР | FMW | 2 | 9 | F |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 | 12 | М |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 | 10 | М |
Пример 1: Да предположим, че искаме да подредим резултата в сортирания ред, възходящ или низходящ, въз основа на първата колона с име. В този случай бихме искали да използваме клаузата ORDER BY, за да получим резултата. За да направим това, ще изпълним заявката по-долу, както следва:
SELECT * FROM EMPLOYEES ORDER BY FIRST_NAME ASC;
Ключова разлика между GROUP BY и ORDER BY
Следните са точките, които правят разлика между клаузите GROUP BY и ORDER BY:
- Изразът GROUP BY в SQL се използва за групиране на записите въз основа на подобна стойност в конкретна колона. От друга страна, клаузата ORDER BY в SQL се използва за сортиране на резултатите на дисплея във възходящ или низходящ ред.
- Докато изпълнявате заявка с помощта на клаузата GROUP BY в SQL заявка, е задължително да използвате агрегатната функция. От друга страна, докато използвате клаузата ORDER BY в SQ, не е задължително да използвате агрегатна функция.
- Клаузата GROUP BY винаги се поставя в SQL заявка след клаузата WHERE, но преди клаузата ORDER BY. От друга страна, клаузата ORDER BY винаги се поставя след клаузата GROUP BY.
Сравнителна диаграма
SR.NO | ГРУПИРАНЕ ПО | ПОРЪЧАЙТЕ ОТ |
1 | Клаузата GROUP BY се използва за групиране на редовете с подобни стойности. | Клаузата ORDER BY се използва за сортиране на резултата в низходящ или възходящ ред |
2 | Той контролира представянето на редовете | Той контролира представянето на колоните |
3 | Клаузата GROUP BY винаги се поставя преди клаузата ORDER BY. | Клаузата ORDER BY винаги се поставя след клаузата GROUP BY. |
4 | Задължително е да се използва агрегатна функция | Не е задължително да се използва агрегатна функция |
5 | Атрибутът не може да бъде под агрегатната функция | в израза GROUP BY. Атрибутът може да бъде под агрегатната функция в оператора ORDER BY. |