Anda di halaman 1dari 25

MI2154 – SQL Lanjut

Semester Genap/ Tahun Ajaran 2015-2016

Fungsi Pengelompokkan
(Group Function)
Disusun oleh:
Ir. Ely Rosely, M.B.S. – ely.rosely@tass.telkomuniversity.ac.id

Hanya dipergunakan untuk kepentingan pengajaran di Lingkungan Universitas Telkom


Tujuan Pembelajaran
1. Siswa mengerti kegunaan fungsi pengelompokkan
2. Siswa mampu menerapkan fungsi pengelompokkan sesuai kebutuhan
3. Siswa mampu mengelompokkan baris data untuk menampilkan lebih dari
satu hasil
4. Siswa membatasi penampilan data menggunakan klausa HAVING
Group Function
Group functions digunakan pada sekelompok data untuk memberikan satu hasil
per grup.
Tipe-tipe Group Function

Terdapat beberapa tipe:


• AVG
• COUNT
• MAX
• MIN
• STDDEV
• SUM
• VARIANCE
Tipe-tipe Group Function
Fungsi Hasil
AVG([DISTINCT|ALL]n) Nilai rata-rata dari n, nilai null diabaikan
COUNT({*|[DISTINCT|ALL] Jumlah baris, nilai null tidak diabaikan bila
expr}) menggunakan * atau ALL
MAX([DISTINCT|ALL]expr) Nilai maximum dari expr, nilai null diabaikan
MIN([DISTINCT|ALL]expr) Nilai minimum dari expr, nilai null diabaikan
STDDEV([DISTINCT|ALL]x) Standar deviasi dari n, nilai null diabaikan
SUM([DISTINCT|ALL]n) Jumlah nilai dari n, nilai null diabaikan
VARIANCE([DISTINCT|ALL]x) Varians dari n, nilai null diabaikan
Sintaks Group Function

SELECT [column,] group_function(column), ...


FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
Penggunaan Fungsi AVG dan SUM

Fungsi AVG, SUM, MIN, dan MAX dapat digunakan pada


kolom yang menyimpan data numerik.

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)


FROM employees
WHERE job_id LIKE '%REP%';

AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)


8272,72727 11500 6000 273000
Penggunaan Fungsi MIN dan MAX

Fungsi MIN, dan MAX dapat digunakan pada kolom yang


menyimpan data numerik, karakter, dan date.

SELECT MIN(hire_date), MAX(hire_date)


FROM employees;

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(expr) menghasilkan jumlah baris dari expr yang tidak bernilai


null:
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 80;

COUNT(COMMISSION_PCT)
34
Penggunaan keyword DISTINCT

• COUNT(DISTINCT expr) menghasilkan jumlah baris expr


dengan tidak menghitung baris duplikat dan yang bernilai null.

SELECT COUNT(DISTINCT department_id)


FROM employees;

COUNT(DISTINCTDEPARTMENT_ID)
11
Penggunaan GroupFunction dan Nilai Null

Group function mengabaikan nilai null


SELECT AVG(commission_pct)
FROM employees;

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 column, group_function(column)


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Penggunaan Klausa GROUP BY

Semua kolom dalam SELECT yang tidak dimasukkan ke group


Function harus ada dalam klausa GROUP BY.

SELECT department_id, AVG(salary)


FROM employees
GROUP BY department_id ;
DEPARTMENT_ID AVG(SALARY)
100 8600
30 4150
7000
90 19333,3333
20 9500
70 10000
110 10150
...
Penggunaan Klausa GROUP BY

Kolom dalam GROUP BY tidak harus ada dalam SELECT.

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

Total Salary yang dibayarkan untuk setiap job dalam setiap


departemen.
Penggunaan Klausa GROUP BY
pada Beberapa Kolom
SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;

DEPT_ID JOB_ID SUM(SALARY)


110 AC_ACCOUNT 8300
90 AD_VP 34000
50 ST_CLERK 55700
80 SA_REP 243500
50 ST_MAN 36400
80 SA_MAN 61000
100 FI_ACCOUNT 39600
SA_REP 7000
70 PR_REP 10000
Penggunaan GROUP Function yang
Salah
Kolom-kolom yang ada dalam SELECT tetapi tidak termasuk dalam fungsi
agregasi, harus ada dalam klausa GROUP BY

SELECT department_id, COUNT(last_name)


FROM employees;

SELECT department_id, COUNT(last_name)


*
ORA-00937: not a single-group group function

Kolom department_id harus ada dalam GROUP BY.


Penggunaan WHERE untuk GROUP
Function
Untuk membatasi grup function tidak boleh menggunakan klausa
WHERE, tetapi gunakan klausa HAVING.

SELECT department_id, AVG(salary)


FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;

WHERE AVG(salary) > 8000


*
ORA-00934: group function is not allowed here

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

Menampilkan nilai rata-rata salary yang maksimum:

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.

Anda mungkin juga menyukai