Anda di halaman 1dari 30

GROUPING, AGREGAT DAN SUBQUERY

BASIS DATA LANJUT


OUTLINE

• Grouping dan Fungsi Agregat


• Penggunaan Fungsi Aggregat

• Penggunaan klausa GROUP BY

• Menyaring kelompok nilai dengan HAVING

• Subquery
FUNGSI AGREGAT

3
FUNGSI AGREGAT

• Fungsi yang mengambil suatu kumpulan nilai-nilai sebagai input dan


mengembalikan satu nilai sebagai output

• Nilai NULL diabaikan kecuali penggunaan fungsi COUNT(*)

• Dapat digunakan pada klausa


• SELECT, HAVING, ORDER BY

• Sering digunakan pada klausa GROUP BY


FUNGSI BAWAAN AGGREGATE

Common Statistical Other

• SUM • STDEV • CHECKSUM_AGG


• MIN • STDEVP • GROUPING
• MAX • VAR • GROUPING_ID
• AVG • VARP
• COUNT
SUM()
• Mengembalikan jumlah semua nilai numerik non-NULL dalam kolom

• Syntax:

SUM( [ALL | DISTINCT] expression )

6
SUM(DISTINCT )

• Penggunaan DISTINCT pada Tanpa Distinct

fungsi agregat untuk melakukan


operasi pada nilai unik saja

• Tabel Transactions
Menggunakan Distinct

7
AVG()

• Mengembalikan nilai rata-rata semua nilai numerik non-NULL dalam


kolom

• Syntax:

AVG( [ALL | DISTINCT] expression )

8
COUNT()

• Mengembalikan jumlah row dalam kolom

• Fungsi COUNT(*) menghitung semua baris dalam tabel.

• COUNT(nama_kolom) menghitung semua baris yang ada pada kolom


tertentu di dalam tabel yang bernilai non-NULL

• Syntax:

COUNT( [ALL | DISTINCT] expression )

9
COUNT()
SELECT * FROM [HR].[Employees]

Count(*) Count(column_name)

10
MAX() & MIN()

MIN() MAX()
• Mengembalikan nilai terendah • Mengembalikan nilai tertinggi
dalam kolom dalam kolom
• Syntax: • Syntax:
MIN(expression) MAX(expression)

11
FUNGSI BAWAAN AGREGAT
• Selain data numerik, fungsi agregat juga dapat meringkas tipe data
yang lain seperti date, time dan character
• Contoh:
• Mengembalikan nama perusahaan yang pertama dan terakhir

• Mengembalikan pesanan paling awal dan paling akhir berdasarkan tanggal

12
FUNGSI AGREGAT DENGAN NULL

• Kebanyakan fungsi agregat mengabaikan NULL, kecuali COUNT(*)

• Gunakan ISNULL atau COALESCE untuk mengganti nilai NULL sebelum


menerapkan fungsi agregat

Tabel t1 SELECT SUM(c2) AS sum_nonnulls,


COUNT(*)AS count_all_rows,
COUNT(c2)AS count_nonnulls,
AVG(c2) AS [avg],
(AVG(COALESCE(c2,0))) AS arith_avg
FROM t1;

13
FUNGSI BAWAAN AGGREGATE
• Ketika menggunakan fungsi aggregate pada klausa SELECT, semua
kolom pada klausa SELECT harus merupakan fungsi aggregate juga
atau direferensikan pada klausa GROUP BY.

Tidak menggunakan fungsi aggregate


GROUPING

15
GROUP BY
• Mengelompokkan baris output berdasarkan field yang terdapat pada
sebuah tabel
• Syntax:
SELECT <select_list>
FROM <table_source>
WHERE <search_condition>
GROUP BY <group_by_list>
CONTOH GROUP BY
SELECT orderid, empid, custid
FROM Sales.Orders;
SELECT empid, COUNT(*)
FROM Sales.Orders
WHERE custid =3
GROUP BY empid;

WHERE custid =3;

17
HAVING

• Untuk memfilter baris-baris hasil dari pengelompokkan

• HAVING berbeda dengan WHERE


• WHERE memberikan kriteria sebelum pengelompokan dan melakukan
penyaringan baris(single row)

• HAVING memberikan kriteria setelah pengelompokan dilakukan, menyaring


kelompok, dan menentukan kondisi bagi Group By(multi-row)

18
CONTOH HAVING
Tanpa HAVING Dengan HAVING
SELECT custid, COUNT(*) AS count_orders SELECT custid, COUNT(*) AS count_orders
FROM Sales.Orders FROM Sales.Orders
GROUP BY custid GROUP BY custid
HAVING COUNT(*) =3

19
SUBQUERY

20
SUBQUERY

• Pernyataan SELECT yang bersarang atau tertanam dalam query lain

• Subquery dapat bernilai scalar (single-value) atau multi-value

MAIN QUERY / SELECT …


OUTER QUERY FROM …
WHERE …
SELECT …
FROM … SUBQUERY /
WHERE … INNER QUERY

21
SUBQUERY (1)

• Sintaks

SELECT <namaKolom>

FROM <namaTabel>

WHERE <namaKolom> OPERATOR

(SELECT <namaKolom>

FROM <namaTabel>

WHERE <ekspresi>)

22
SUBQUERY (2)
mahasiswa
idmhs Nama SELECT a.idmhs, a.name, a.total_nilai
V001 Abe FROM mahasiswa a, nilai b
V002 Betty WHERE a.idmhs= b.idmhs
AND b.total_nilai >
V003 Cellin (SELECT total_nilai
V004 Diaz FROM nilai
WHERE idmhs = 'V002')
nilai
idmhs total_nilai Idmhs Nama Total_nilai
V001 90 V001 Abe 90
V002 80 V004 Diaz 81
V003 74
V004 81

23
SUBQUERY SKALAR

• Contoh:
• Menampilkan detail order terakhir
SELECT orderid,
productid,
unitprice,
qty
FROM Sales.OrderDetails
WHERE orderid =
(
SELECT MAX(orderid) AS
LastOrder
FROM Sales.Orders
)

24
SUBQUERY MULTI-VALUE

• Subquery dengan kembalian multi-nilai dapat menghasilkan


beberapa nilai pada satu kolom

• Menggunakan predikat IN
• Jika beberapa nilai pada hasil subquery cocok dengan predikat IN,
maka akan mengembalikan nilai TRUE

25
SUBQUERY MULTI-VALUE (2)

• Contoh:
• Menampilkan customer_id dan order_id dari customer yang berada pada negara
MEXICO

SELECT custid, orderid


FROM Sales.Orders
WHERE custid IN
(
SELECT custid
FROM Sales.Customers
WHERE country = 'Mexico'
)
26
CORRELATED SUBQUERY

• Merupakan subquery yang merujuk ke elemen yang ada di outer query

• Contoh:
• Mengembalikan pesanan dengan tanggal pesanan terbaru untuk setiap karyawan
SELECT orderid, empid, orderdate
FROM Sales.Orders AS O1
WHERE orderdate =
(
SELECT MAX(orderdate)
FROM Sales.Orders AS O2
WHERE O2.empid = O1.empid
)
ORDER BY empid, orderdate

27
SUBQUERY DENGAN KEYWORD EXISTS
• Keyword EXISTS pada subquery, dapat berfungsi sebagai tes
eksistensi(keberadaan)
• EXISTS mengembalikan nilai TRUE atau FALSE
• Jika ada baris yang dihasilkan oleh subquery, EXISTS mengembalikan nilai
TRUE
• Jika tidak ada baris yang dihasilkan oleh subquery, EXISTS mengembalikan
nilai FALSE
• Syntax:
WHERE [NOT] EXISTS (subquery)
28
SUBQUERY DENGAN KEYWORD EXISTS

Menggunakan COUNT Menggunakan EXISTS

*Memiliki hasil yang sama 29


TERIMA KASIH

30

Anda mungkin juga menyukai