Fungsi Pengelompokkan
(Group Function)
Disusun oleh:
Ir. Ely Rosely, M.B.S. – ely.rosely@tass.telkomuniversity.ac.id
MIN(HIRE_DATE MAX(HIRE_DATE)
17-06-1987 21-04-2000
Penggunaan Fungsi COUNT
COUNT(*) menghasilkan jumlah baris data dalam tabel:
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
COUNT(*)
45
COUNT(COMMISSION_PCT)
34
Penggunaan keyword DISTINCT
COUNT(DISTINCTDEPARTMENT_ID)
11
Penggunaan GroupFunction dan Nilai Null
AVG(COMMISSION_PCT)
,222857143
Fungsi NVL merubah nilai null menjadi 0 sehingga group functions harus
menghitung baris yang bernilai null
SELECT AVG(NVL(commission_pct, 0))
FROM employees;
AVG(NVL(COMMISSION_PCT,0))
,072897196
Membuat Group Data
Data dalam tabel dapat dibagi-bagi menjadi beberapa kelompok
Sintaks Klausa GROUP BY
Dengan menggunakan klausa GROUP BY, maka data-data dalam
tabel dapat dibagi-bagi menjadi kelompok yang lebih kecil.
Formatnya:
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
AVG(SALARY)
8600
4150
7000
19333,3333
9500
10000
10150
...
GROUP BY Lebih dari Satu Kolom
WHERE AVG(salary) > 8000 diganti dengan HAVING AVG(salary) > 8000
Membatasi Hasil Group Function
Untuk mencari nilai maksimum salary setiap departemen yang mempunyai salary
maksimum lebih dari $ 10,000 , maka yang harus dilakukan adalah:
1. Cari nilai average salary untuk setiap departemen dengan GROUP BY
department_id.
2. Batasi group hanya untuk departemen yang mempunyai nilai salary maksimum
lebih dari $10,000.
Membatasi Hasil Grup dengan
Klausa HAVING
Ketika menggunakan klausa HAVING, Basis data membatasi group
dengan cara:
1. Baris-baris dikelompokkan.
2. Group function diterapkan pada kelompok/grup.
3. Grup yang cocok dengan klausa HAVING ditampilkan.
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Penggunaan Klausa HAVING
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
DEPARTMENT_ID MAX(SALARY)
100 12000
30 11000
90 24000
20 13000
110 12000
80 14000
6 rows selected.
Penggunaan Klausa HAVING
SELECT job_id, SUM(salary) PAYROLL
FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) > 13000
ORDER BY SUM(salary);
JOB_ID PAYROLL
PU_CLERK 13900
AD_PRES 24000
IT_PROG 28800
AD_VP 34000
ST_MAN 36400
FI_ACCOUNT 39600
...
9 rows selected.
Group Functions Bersarang
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
MAX(AVG(SALARY))
19333,3333
Reference
• N. Greenberg. Oracle Database 10g: SQL Fundamental 1 –
Volume 1 Student Guide. California: Oracle Publisher 2004.