poniedziałek, 13 lutego 2012

8. Funkcje agregujące Np. rollup, Cube...

Wyciągając z bazy dane przy użyciu samej klauzuli GROUP BY nie uzyskamy częściowych podsumowań po poszczególnych poziomach wymiarów. Do wprowadzenia wyników częściowych podsumowań służą operatory ROLLUP i CUBE. Zapytanie:
SELECT Czas.rok, Miejsce.miasto, Towar.kategoria, SUM(Sprzedaż.wartość)AS "W sumie"
FROM Sprzedaż NATURAL JOIN Miejsce NATURAL JOIN Towar NATURAL JOIN Czas
GROUP BY ROLLUP(Czas.Rok, Miejsce.Miasto, Towar.Kategoria);
da wynik w rodzaju (oczywiście używane po stronie klienckiej narzędzie OLAP przedstawi wynik tego zapytania w bardziej czytelny sposób np. za pomocą wykresu):
   ROK MIASTO     KATEGORIA      W sumie
------ ---------- ----------- ----------
1996   Warszawa   Komputery       100000
1996   Warszawa   Telewizory       50000
....
1996   Warszawa       *          1000000
1996   Łódź       Komputery        50000
1996   Łódź       Telewizory       25000
         .....
1996   Łódź            *          250000
         .....
1996     *             *         2000000
1997   Warszawa   Komputery      1500000
         ....
  *       *            *        10000000
Tab. 7.4 Wynik operacji ROLLUP Operator ROLLUP daje wszystkie częściowe podsumowania po poszczególnych wymiarach – w danej kolejności. W wyniku istotna jest kolejność grupowanych kolumn. W szczególności zapytanie:
SELECT e.Deptno, e.EmpNo, SUM(e.Sal) AS Zarobki
FROM Emp e
GROUP BY ROLLUP(e.Deptno, e.EmpNo);
daje wynik:
    DEPTNO      EMPNO    ZAROBKI
---------- ---------- ----------
        10       7782       2450
        10       7839       5000
        10       7934       1300
        10                  8750
        20       7369        800
        20       7566       2975
        20       7788       3000
        20       7876       1100
        20       7902       3000
        20                 10875
        30       7900        950
        30       7499       1600
        30       7521       1250
        30       7654       1250
        30       7698       2850
        30       7844       1500
        30                  9400
                           29025
Tab. 7.5 Wynik operacji ROLLUP Operator ROLLUP daje więc w szczególności możliwość, której brakowało dotychczas w SQL – zwracania w wyniku zarówno szczegółowych wierszy jak ich podsumowań.
Operator CUBE daje nawet więcej niż ROLLUP, bo również wszystkie częściowe podsumowania po poszczególnych wymiarach – we wszystkich możliwych kolejnościach.
Na przykład, gdybyśmy w powyższej instrukcji SELECT zamienili ROLLUP na CUBE, dostalibyśmy oprócz powyższych wierszy również takie wiersze jak:
 *   Warszawa    Komputery    1000000
          ...
 *   Warszawa         *       9000000
          ...
 *       *       Komputery    8000000
          ....
1996     *       Komputery     500000
Tab. 7.6 Wynik operacji CUBE
  Jest też możliwość łączenia zwykłego grupowania z grupowaniem typu ROLLUP i CUBE. Na przykład:
GROUP BY Miejsce.Miasto, ROLLUP(Czas.Rok, Towar.Kategoria)
Źródło: http://edu.pjwstk.edu.pl/wyklady/szb/scb/wyklad7/w7.htm

Brak komentarzy:

Prześlij komentarz