Anda di halaman 1dari 15

FUNGSI AGREGASI

Definisi
 Fungsi agregasi merangkum hasil dari sebuah
ekspresi atau sejumlah baris, mengembalikan
sebuah nilai tunggal. Syntax agregasi yang umum
digunakan, sbb:
aggregate_function ([DISTINCT|ALL] expression)
Fungsi Agregasi
 Beberapa fungsi agregasi yang sering digunakan,
sbb:
 SUM

 COUNT

 AVG

 MIN

 MAX
Contoh
 Terdapat sebuah tabel Employee:
EMPLOYEE ( EMP_ID, NAME, DEPT_NAME, SALARY)

CREATE TABLE EMPLOYEE


(
EMP_ID INT,
NAME VARCHAR (50),
DEPT_NAME VARCHAR (50),
SALARY INT
);
Tabel Employee
 Eksekusi syntax berikut untuk memasukkan data ke
dalam tabel Empolyee:
INSERT INTO EMPLOYEE VALUES (100,'ABC','ENG',50000);
INSERT INTO EMPLOYEE VALUES (101,'DEF','ENG',60000);
INSERT INTO EMPLOYEE VALUES (102,'GHI','PS',50000);
INSERT INTO EMPLOYEE VALUES (103,'JKL','PS',70000);
INSERT INTO EMPLOYEE VALUES (104,'MNO','SALES',75000);
INSERT INTO EMPLOYEE VALUES (105,'PQR','MKTG',70000);
INSERT INTO EMPLOYEE VALUES (106,‘STU','SALES',null);
COMMIT;
SELECT on Employee
 Setelah menjalankan script INSERT, maka
didapatkan record sebagai berikut:
SELECT *
FROM Employee
SUM
Query 1: Mencari jumlah dari semua sallary:
SELECT SUM(SALARY) FROM EMPLOYEE;

Query 2: To find the sum of the salaries grouped by dept


SELECT DEPT_NAME, SUM(SALARY)
FROM EMPLOYEE GROUP BY DEPT_NAME
SUM (lanj.)
Jika ingin menampilkan jumlah salary untuk departemen ‘Eng’ saja.
SELECT DEPT_NAME,SUM(SALARY)
FROM EMPLOYEE GROUP BY DEPT_NAME
WHERE DEPT_NAME = 'ENG';

Query akan menghasilkan sql error (di Oracle)


ORA-00933: SQL Command not properly ended
SUM (lanj.)
Jika menggunakan fungsi agregasi, maka WHERE clause tidak bisa digunakan untuk
menyeleksi hasil. Solusinya, menggunakan HAVING clause. Query menjadi:

SELECT DEPT_NAME,SUM(SALARY) FROM EMPLOYEE


GROUP BY
DEPT_NAME
HAVING DEPT_NAME = 'ENG';
Fungsi AVG

Query 1: Jika kita ingin menghitung AVG dari semua salary


SELECT AVG(SALARY) FROM EMPLOYEE

Tabel Employee memiliki 7 record dan rata-rata salary-nya


seharusnya:
50,000+60,000+50,000+70,000+75,000+70,000+null/7 = 53571

Tetapi kita mendapatkan 62500 dari query? Mengapa demikian????


AVG (lanj.)

Catatan: COUNT(*) adalah satu-satunya fungsi yang tidak mengabaikan null.


Fungsi lain seperti SUM, AVG, MIN, MAX, semuanya mengabaikan null.
Karena pada data, terdapat employee yang salary nya adalah null, maka pada
query sebelumnya:

SELECT AVG(SALARY) FROM EMPLOYEE

Akan mengabaikan null, sehingga nilai rata-ratanya menjadi

50,000+60,000+50,000+70,000+75,000+70,000/6 = 62500
AVG (lanj.)

Select COUNT(*),COUNT(SALARY) FROM EMPLOYEE

Akan menghasilkan

COUNT(*) COUNT(SALARY)
7 6

Karena COUNT(*) tidak akan mengabaikan null di hasil.


Sedangkan COUNT(SALARY) akan mengabaikan null.

SELECT SUM(SALARY)/COUNT(*)
FROM EMPLOYEE
Using MIN AND MAX
Query 1: Mencari minimum salary dari masing-masing departemen

SELECT MIN(SALARY),MAX(SALARY),DEPT_NAME
FROM EMPLOYEE
GROUP BY DEPT_NAME;
Latihan
1. Tampilkan nama sailor termuda.
2. Tampilkan rata-rata umur sailor.
3. Tampilkan jumlah boat untuk masing-masing tipe boat.
4. Tampilkan jumlah peminjaman boat untuk masing-
masing tipe boat.
5. Tampilkan bid dan nama boat yang paling sering
dipinjam.
6. Tampilkan nama sailor yang paling sering menyewa
boat.
Tabel
Tabel Sailors Tabel Reserves

sid sname rating age sid bid day


22 Dustin 7 45.0 22 101 10/10/98
29 Brutus 1 33.0 22 102 10/10/98
31 Lubber 8 55.5 22 103 10/8/98
32 Andy 8 25.5 22 104 10/7/98
58 Rusty 10 35.0 31 102 11/10/98
64 Horatio 7 35.0 31 103 11/6/98
71 Zorba 10 16.0 31 104 11/12/98
74 Horatio 9 35.0 64 101 9/5/98
85 Art 3 25.5 64 102 9/8/98
95 Bob 3 63.5 74 103 9/8/98

Tabel Boat_types bid bname color boat_type


101 Interlake Blue T01
bt_id bt_name
102 Interlake Red T01
Tabel Boats
T01 Sailiboat
103 Clipper Green T02
T02 Motorboat
104 Marine Red
T03 Airboat

Anda mungkin juga menyukai