La fonction CUBE est comme sa petite sœur ROLLUP est une fonction d'agrégation qui permet d'avoir tout les combinaisons entre les composants d'une agrégation, un exemple :
SQL> select deptno,job,sum(sal)
2 from emp group by cube(deptno,job)
3 order by deptno;
18 ligne(s) sélectionnée(s).
Le résultat montre quatre agrégations par les deux colonnes (deptno,job), par deptno seulement, par job seulement et le total dans toute la table ce que revient à faire mais avec quatre passages de la table emp alors que la précédente le fait dans un seule passage :
SQL> select deptno,job,sum(sal) from emp group by deptno,job
2 union
3 select to_number(null),job,sum(sal) from emp group by job
4 union
5 select deptno,to_char(null),sum (sal) from emp group by deptno
6 union
7 select to_number(null),to_char(null),sum(sal) from emp;
18 ligne(s) sélectionnée(s).
Le nombre d'agrégation de CUBE est 2^nombre de colonnes dans le select, par contre avec ROLLUP on seulement n+1 ou n est le nombre de colonnes dans le select.
SQL> select deptno,job,sum(sal)
2 from emp group by cube(deptno,job)
3 order by deptno;
DEPTNO | JOB | SUM(SAL) |
---------- | --------- | ---------- |
10 | CLERK | 1300 |
10 | MANAGER | 2450 |
10 | PRESIDENT | 5000 |
10 | 8750 | |
20 | ANALYST | 6000 |
20 | CLERK | 1900 |
20 | MANAGER | 2975 |
20 | 10875 | |
30 | CLERK | 950 |
30 | MANAGER | 2850 |
30 | SALESMAN | 5600 |
30 | 9400 | |
ANALYST | 6000 | |
CLERK | 4150 | |
MANAGER | 8275 | |
PRESIDENT | 5000 | |
SALESMAN | 5600 | |
29025 |
18 ligne(s) sélectionnée(s).
Le résultat montre quatre agrégations par les deux colonnes (deptno,job), par deptno seulement, par job seulement et le total dans toute la table ce que revient à faire mais avec quatre passages de la table emp alors que la précédente le fait dans un seule passage :
SQL> select deptno,job,sum(sal) from emp group by deptno,job
2 union
3 select to_number(null),job,sum(sal) from emp group by job
4 union
5 select deptno,to_char(null),sum (sal) from emp group by deptno
6 union
7 select to_number(null),to_char(null),sum(sal) from emp;
DEPTNO | JOB | SUM(SAL) |
---------- | --------- | ---------- |
10 | CLERK | 1300 |
10 | MANAGER | 2450 |
10 | PRESIDENT | 5000 |
10 | 8750 | |
20 | ANALYST | 6000 |
20 | CLERK | 1900 |
20 | MANAGER | 2975 |
20 | 10875 | |
30 | CLERK | 950 |
30 | MANAGER | 2850 |
30 | SALESMAN | 5600 |
30 | 9400 | |
ANALYST | 6000 | |
CLERK | 4150 | |
MANAGER | 8275 | |
PRESIDENT | 5000 | |
SALESMAN | 5600 | |
29025 |
Le nombre d'agrégation de CUBE est 2^nombre de colonnes dans le select, par contre avec ROLLUP on seulement n+1 ou n est le nombre de colonnes dans le select.
0 comments:
Enregistrer un commentaire