08_SQL OLAP DBMS DB2 GROUP BY CUBE ROLL UP .pptx

ssuser52d6bf 9 views 45 slides May 13, 2024
Slide 1
Slide 1 of 45
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45

About This Presentation

Materi Query SQL OLAP Pada DBMS DB2


Slide Content

SQL OLAP O n L ine A nalytical P rocessing Think : building and delivering information via SQL

SQL OLAP FUNCTIONs RANK : memberi ranking pada setiap baris berdasarkan urutan tertentu DENSE_RANK: MEMBERI RANKING pada partisi tertentu (DENSE: RINGKAS, PADAT) ROW_NUMBER: MEMBERI NOMOR BARIS berdasarkan satu atau lebih kolom ROLLUP CUBE GROUPING SETS GROUPING

Database fundamentals > SQL > Language elements > Expressions > OLAP specification On-Line Analytical Processing (OLAP) functions provide the ability to: return ranking {RANK, DENSE_RANK} row numbering { row_number } existing aggregate function information as a scalar value in a query result.

Tabel employee

RANK()

SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK () OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE SALARY+BONUS > 50000 ORDER BY LASTNAME; PRIORITAS PERTAMA DIURUTKAN BY LASTNAME DEFAULT PENGURUTAN ADALAH ascending. Desc  bottom up  dari z ke a, dari besar ke kecil Asc  top-down  dari A KE Z, DARI KECIL KE BESAR

SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK () OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE SALARY+BONUS > 50000; PRIORITAS PERTAMA DIURUTKAN BERDASARKAN RANK_SALARY Desc  dari BESAR KE KECIL. SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK() OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE SALARY+BONUS > 50000 ORDER BY SALARY+BONUS DESC; SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK() OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE SALARY+BONUS > 50000 ORDER BY RANK_SALARY;

SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK () OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE join departement on employee. Workdept = departement.deptno WHERE SALARY+BONUS > 50000 ORDER BY RANK_SALARY; SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK() OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE SALARY+BONUS > 50000 ORDER BY RANK() OVER (ORDER BY SALARY+BONUS DESC) ;

SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK () OVER (ORDER BY LASTNAME) AS RANK_LASTNAME FROM EMPLOYEE WHERE SALARY+BONUS > 50000 order by rank_lastname ;  by default ascending ( asc : dari a ke z ) PRIORITAS PERTAMA DIURUTKAN BERDASARKAN LASTNAME MENGGUNAKAN FUNGSI RANK().

Query untuk mencari rangking dari rata-rata total_salary (salary ditambah bonus) per departemen . Tampilkan kolom workdept , rata-rata total_salary , dan rankingnya . SELECT WORKDEPT, AVG(SALARY+BONUS) AS AVG_TOTAL_SALARY , RANK () OVER (ORDER BY AVG(SALARY+BONUS) DESC) AS RANK_AVG_SAL FROM EMPLOYEE GROUP BY WORKDEPT ORDER BY RANK_AVG_SAL;

DENSE_RANK MEMBERI RANKING SECARA PARSIAL . MEMBERI RANKING PADA KELOMPOK DATA TERTENTU.

Beri ranking pada setiap kelompok departement (WORKDEPT) berdasarkan EDLEVEL tertinggi . Urutkan berdasarkan WORKDEPT. SELECT EMPNO, LASTNAME, WORKDEPT, EDLEVEL, DENSE_RANK() OVER (PARTITION BY WORKDEPT ORDER BY EDLEVEL DESC) AS RANK_EDLEVEL FROM EMPLOYEE ORDER BY WORKDEPT;

Beri ranking pada setiap kelompok departement (WORKDEPT) berdasarkan EDLEVEL tertinggi . Urutkan berdasarkan LASTNAME. SELECT EMPNO, LASTNAME, WORKDEPT, EDLEVEL, DENSE_RANK() OVER (PARTITION BY WORKDEPT ORDER BY EDLEVEL DESC) AS RANK_EDLEVEL FROM EMPLOYEE ORDER BY LASTNAME;

Beri ranking pada setiap kelompok departement (WORKDEPT) berdasarkan EDLEVEL tertinggi . Urutkan berdasarkan WORKDEPT dan LASTNAME. SELECT EMPNO, LASTNAME, WORKDEPT, EDLEVEL, DENSE_RANK() OVER (PARTITION BY WORKDEPT ORDER BY EDLEVEL DESC) AS RANK_EDLEVEL FROM EMPLOYEE ORDER BY WORKDEPT, LASTNAME;

CONTOH: Mencari 5 ranking total salary ( salary+bonus ) tertinggi . SELECT EMPNO, LASTNAME, FIRSTNME, TOTAL_SALARY, RANK_SALARY FROM ( SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK () OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE) AS RANKED_EMPLOYEE WHERE RANK_SALARY < 6 ORDER BY RANK_SALARY;

SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK() OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE (SALARY + BONUS) > 90000; SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK() OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE TOTAL_SALARY > 90000; SELECT EMPNO, LASTNAME, FIRSTNME, SALARY+BONUS AS TOTAL_SALARY, RANK() OVER (ORDER BY SALARY+BONUS DESC) AS RANK_SALARY FROM EMPLOYEE WHERE RANK_SALARY > 6; "TOTAL_SALARY" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.18.60

LEAD() FIRST_VALUE()

SELECT EMPNO, WORKDEPT, JOB, SALARY, LEAD(SALARY, 0) OVER (PARTITION BY WORKDEPT ORDER BY SALARY) AS L_SALARY FROM EMPLOYEE ORDER BY WORKDEPT, SALARY; SELECT EMPNO, WORKDEPT, JOB, SALARY, LEAD(SALARY, 1) OVER (PARTITION BY WORKDEPT ORDER BY SALARY) AS L_SALARY FROM EMPLOYEE ORDER BY WORKDEPT, SALARY; SELECT EMPNO, WORKDEPT, JOB, SALARY, LEAD(SALARY, 2) OVER (PARTITION BY WORKDEPT ORDER BY SALARY) AS L_SALARY FROM EMPLOYEE ORDER BY WORKDEPT, SALARY;

LEAD(SALARY, 0) LEAD(SALARY, 1)

SELECT EMPNO, WORKDEPT, LASTNAME, FIRSTNME, JOB, SALARY, LEAD(SALARY, 1) OVER ( PARTITION BY WORKDEPT ORDER BY SALARY) - SALARY AS DELTA_SALARY FROM EMPLOYEE ORDER BY WORKDEPT, SALARY;

SELECT EMPNO, WORKDEPT, JOB, SALARY, FIRST_VALUE(SALARY) OVER (PARTITION BY WORKDEPT ORDER BY SALARY) AS L_SALARY FROM EMPLOYEE ORDER BY WORKDEPT, SALARY;

SELECT JOB, HIREDATE, EMPNO, LASTNAME, FIRSTNME, SALARY, FIRST_VALUE(SALARY) OVER (PARTITION BY JOB ORDER BY HIREDATE) AS FIRST_SALARY, SALARY - FIRST_VALUE(SALARY) OVER (PARTITION BY JOB ORDER BY HIREDATE) AS DELTA_SALARY FROM EMPLOYEE ORDER BY JOB, HIREDATE;

ROW_NUMBER

Memberi nomor pada setiap baris berdasarkan urutan ascending WORKDEPT dan LASTNAME. SELECT ROW_NUMBER() OVER (ORDER BY WORKDEPT, LASTNAME) AS NUMBER, LASTNAME , WORKDEPT, SALARY FROM EMPLOYEE ORDER BY WORKDEPT, LASTNAME ;

ROLLUP() cube() will result in the data being summarized at the CERTAIN levels.

Contoh ROLLUP Menjumlahkan Penjualan Pada Tabel Trans Berdasarkan Country Dan Region

Contoh cube Menjumlahkan Penjualan Pada Tabel Trans Berdasarkan Country Dan Region

WHat’s THE DIFFERENT ? select workdept , job, SUM(SALARY) from employee GROUP BY ROLLUP (WORKDEPT,JOB) ORDER BY WORKDEPT; select workdept , job, SUM(SALARY) from employee GROUP BY (WORKDEPT,JOB) ORDER BY WORKDEPT; select workdept , job, SUM(SALARY) from employee GROUP BY CUBE (WORKDEPT,JOB) ORDER BY WORKDEPT; select workdept , job, SUM(SALARY) from employee GROUP BY GROUPING SETS (WORKDEPT, JOB) ORDER BY WORKDEPT;

WHat’s THE DIFFERENT ? select workdept , job, SUM(SALARY) from employee GROUP BY ROLLUP(WORKDEPT,JOB) ORDER BY WORKDEPT;

WHat’s THE DIFFERENT ? select workdept , job, SUM(SALARY) from employee GROUP BY (WORKDEPT, JOB) ORDER BY WORKDEPT;

WHat’s THE DIFFERENT ? select workdept , job, SUM(SALARY) from employee GROUP BY CUBE(WORKDEPT, JOB) ORDER BY WORKDEPT;

WHat’s THE DIFFERENT ? select workdept , job, SUM(SALARY) from employee GROUP BY GROUPING SETS(WORKDEPT, JOB) ORDER BY WORKDEPT;

GROUPING SETS

GROUPING SETS()

Multiplicative vs. Additive Multiplicative : Perkalian Additive : Penjumlahan

Grouping set index Pada TABEL FAKTA DAPAT DIBERI INDEX UNTUK MENGOPTIMALKAN EKSEKUSI QUERY OLAP GROUPING SET.

CONTOH PERBEDAAN ROLLUP dan CUBE

select * from sales; --41 record select region, sales_date , sum(sales) as hasil_penjualan from sales group by region, sales_Date ; select region, sales_date , sum(sales) as hasil_penjualan from sales group by rollup( region,sales_Date ); select region, sales_date , sum(sales) as hasil_penjualan from sales group by rollup( sales_Date,region ); select region, sales_date , sum(sales) as hasil_penjualan from sales group by cube( region,sales_Date );

TERIMAKASIH