niedziela, 2 lutego 2014

SQL,PL/SQL - Grupowanie danych - Oracle 10/11 cz.11


1) Group By:

Dzięki grupowaniu jesteśmy w stanie ograniczyć dane do takich, które posiadają wspólny mianownik.
Po ograniczeniu zakresu danych możemy skorzystać z funkcji agregujących.

Wybierzemy tych Mangerów, którzy mają ID różne od null:

SELECT location_id FROM departments WHERE manager_id is not null;





Wyświetlimy numery lokalizacji oraz ilość departamentów, które posiadają przydzielonego managera:

SELECT location_id, count(*)  from departments where manager_id is not null GROUP BY location_id;



Na koniec pokażemy te lokalizacje, które mają więcej niż jedną lokalizację, tutaj możemy wykorzystać słowo kluczowe HAVING, zamiast WHERE, które jest niedostępne podczas grupowania:


SELECT location_id, count(*)  from departments where manager_id is not null GROUP BY location_id HAVING count(*)>1;




2) Rollup:

Polecenie ROLLUP grupuje dane według wskazanych kolumn w sposób hierarchiczny. Użycie ROLLUP(a, b, c) spowoduje wygenerowanie następujących grupowań: (a, b, c), (a, b), (a) oraz rekordu agregującego cały zbiór. Inaczej mówiąc, użycie w zapytaniu konstrukcji ROLLUP(a, b, c) jest równoważne z wykonaniem czterech zapytań połączonych klauzulą UNION ALL, gdzie każde zapytanie posiada odpowiednią klauzulę GROUP BY. Poniższy przykład pokazuje działanie polecenia ROLLUP:

SELECT department_id, manager_id, sum(salary)  from employees group by rollup(department_id, manager_id) order by department_id, manager_id;









Brak komentarzy:

Prześlij komentarz