Kurs Oracle SQL online. Grupowanie, czyli klauzula GROUP BY

Witajcie 馃檪

W tej lekcji kursu Oracle SQL zajmiemy si臋 grupowaniami – czyli jak zrobi膰, 偶eby nasze funkcje agreguj膮ce dzia艂a艂y w ramach pewnej grupy rekord贸w.

Jak dzia艂a艂y funkcje agreguj膮ce w poprzednich lekcjach?

Je艣li w zapytaniu nie by艂o grupowania oraz:

  • nie by艂o warunku WHERE – grup膮 by艂a ca艂a tabela. Funkcja dzia艂a艂a w ramach wszystkich rekord贸w w tabeli
  • by艂 warunek w WHERE – funkcja dzia艂a艂a w ramach rekord贸w ograniczonych tym warunkiem

Teraz do tworzonych przez nas zapyta艅 dodamy GROUP BY – rekordy (kt贸re zosta艂y po ewentualnym filtrowaniu w WHERE) zostan膮 podzielone na grupy i w ramach nich zadzia艂a funkcja agreguj膮ca. Innymi s艂owy – grupowanie to 艂膮czenie rekord贸w w oparciu o wsp贸ln膮 cech臋.

Kurs Oracle SQL Online - grupowanie

Przyk艂ad1. Wy艣wietl ilu jest pracownik贸w w ramach poszczeg贸lnych job_id

SELECT job_id, Count(*) ilu_klient贸w
 FROM employees
 GROUP BY job_id;

Przyk艂ad 2. Spr贸buj doda膰 kolumn臋 last_name.

SELECT job_id, Count(*) ilu_klient贸w, last_name聽
FROM employees聽
GROUP BY job_id;

ORA-00979: not a GROUP BY expression

W przypadku grupowania – po SELECT mog膮 sta膰 tylko kolumny, kt贸re znajduj膮 si臋 po GROUP lub jest s膮 u偶yte w funkcji agreguj膮cej.

Przyk艂ad 3. Wy艣wietl ilu jest pracownik贸w w ramach poszczeg贸lnych job_id dla pracownik贸w zatrudnionych po 2005 roku.

SELECT job_id, Count(*) ilu_klient贸w聽
FROM employees聽
WHERE EXTRACT(YEAR FROM hire_date)>2005 聽
GROUP BY job_id;

Pytanie za 100 punkt贸w 馃檪 Czy w WHERE mo偶na u偶ywa膰 funkcji agreguj膮cych? (Wybiegaj膮c w przysz艂o艣膰 dodam, 偶e bez podzapyta艅 馃檪 )

聽Przyk艂ad 4. Wy艣wietl ilu jest pracownik贸w w ramach poszczeg贸lnych job_id. Wy艣wietl tylko te job_id, gdzie jest wi臋cej ni偶 5 pracownik贸w.

SELECT job_id, Count(*) ilu_klient贸w
FROM employees
WHERE Count(*) >5
GROUP BY job_id;

ORA-00934: group function is not allowed here

Nie mo偶na 馃檪 Nie mo偶na w WHERE u偶ywa膰 funkcji agreguj膮cych.

WHERE s艂u偶y do limitowania rekord贸w, kt贸re zostan膮 poddane grupowaniu. Do limitowania grup s艂u偶y HAVING. W HAVING mo偶na u偶ywa膰 funkcji agreguj膮cych.

聽Przyk艂ad 5. Wy艣wietl ilu jest pracownik贸w w ramach poszczeg贸lnych job_id. Wy艣wietl tylko te job_id, gdzie jest wi臋cej ni偶 5 pracownik贸w.

SELECT job_id, Count(*) ilu_klient贸w
聽FROM employees
聽GROUP BY job_id
聽HAVING Count(*)>5;

Co w nast臋pnej lekcji?

Z艂膮czenia – czyli jak wybra膰 dane znajduj膮ce si臋 w r贸偶nych tabelach.

 

 

About rstryjek

Passionate about data. Data Warehousing Expert. Snowflake Data SuperHero & Oracle ACE Associate. International conferences Speaker: Snowflake Build Summit-BUILD.local 2021, Oracle Open World, DOAG, UKOUG, APEX World,.. LinkedIn profile
This entry was posted in Oracle, Oracle SQL, Oracle SQL Podstawy, SQL. Bookmark the permalink.

Leave a Reply