Anda di halaman 1dari 18

SQL

Sistem database relasional atau Relational Database Management System (RDBMS) sendiri
adalah sistem penyimpanan data dengan struktur hirarki berikut:

 Database
 Table
 Kolom
 Dan tiap data yang disimpan pada table disebut sebagai baris data (data row).

Perintah SQL selengkapnya terdiri dari dua kategori:

 DDL (Data Definition Language), yaitu berbagai perintah yang digunakan untuk
membuat, merubah, dan menghapus struktur database. Struktur database ini terdiri
dari database, table, kolom dan tipe data. 
 DML (Data Manipulation Language), yaitu berbagai perintah yang digunakan untuk 
o Memasukkan data dengan perintah INSERT
o Mengambil data atau query dengan perintah SELECT
o Merubah data dengan perintah UPDATE
o Menghapus data dengan perintah DELETE

Dari contoh pada praktek sebelumnya, maka dapat disimpulkan perintah yang kita gunakan
adalah melakukan query dengan SELECT.
Membatasi pengambilan jumlah row data menggunakan LIMIT
Menggunakan Prefix pada Nama Kolom
Penulisan nama kolom yang lengkap sebenarnya perlu mencantumkan nama table di depan
nama kolom tersebut, dengan tanda penyambung berupa tanda titik.

Menggunakan Alias pada Kolom


Kita dapat merubah identitas nama kolom yang diambil dengan SELECT dengan
menggunakan keyword AS. Ini dinamakan alias. 
Catatan: alias tidak bisa digunakan untuk wildcard. AS juga bisa dihilangin. Alias juga bisa
dipake untuk nama Table.
Filter untuk Angka
Sebelumnya kita telah melakukan filtering untuk teks, namun WHERE tidak terbatas untuk
tipe data teks saja tapi malah umumnya untuk angka.

Menggunakan Operand AND


Jika sebelumnya kita bahas mengenai OR, maka kita juga bisa menggunakan operand AND
agar dua atau lebih kondisi terpenuhi semuanya. Jika salah satu kondisi tidak terpenuhi, data
tidak akan diambil. Secara umum syntaxnya diilustrasikan berikut ini

Fungsi Scalar vs Fungsi Aggregate


Fungsi skalar dalam SQL digunakan untuk mengembalikan nilai tunggal (single value) dari
suatu nilai input yang diberikan.
Fungsi agregat dalam SQL digunakan untuk melakukan perhitungan pada sekelompok nilai
dan kemudian mengembalikan nilai tunggal.

Fungsi scalar matematik: MySQL :: MySQL 8.0 Reference Manual :: 12.6.2 Mathematical
Functions

Fungsi scalar untuk text MySQL :: MySQL 8.0 Reference Manual :: 12.8 String Functions
and Operators

Fungsi Aggregate

 fungsi aggregate ini digunakan untuk melakukan perhitungan pada sekelompok nilai
Pengenalan GROUP BY

GROUP BY statement akan mengelompokkan data yang bernilai sama ke dalam satu group,
dan dengan menggunakan fungsi aggregate seperti (COUNT, MAX, MIN, SUM, AVG) kita
bisa melakukan agregasi untuk untuk setiap group atau kelompok yang terbentuk.

Hal penting yang perlu diperhatikan adalah: 

1. GROUP BY digunakan dengan SELECT, artinya kolom yang digunakan di GROUP


BY statement, juga perlu ditempatkan di SELECT.
2. GROUP BY ditempatkan setelah WHERE, tetapi jika tidak menggunakan WHERE
maka langsung ditempatkan setelah FROM. 
3. Jika menggunakan ORDER BY, maka GROUP BY ditempatkan sebelum ORDER
BY. 

 “Apakah kita bisa menggunakan group by untuk mengelompokkan data menggunakan 2


kriteria atau 2 kolom, Nja?” tanyaku penasaran.
  “Tentu saja bisa. Group by bisa dilakukan dengan single column ataupun multiple column.
Seperti ini contohnya:”

 Group by Single Column, data dikelompokkan menggunakan kriteria dari satu kolom
saja, misalnya mengelompokkan data berdasarkan provinsi saja. 
 Group by Multiple Column, data dikelompokkan menggunakan kriteria dari dua
kolom atau lebih, misalnya mengelompokkan data berdasarkan province dan brand.
Penggunaan CASE … WHEN….

CASE - Statement ditempatkan sesudah SELECT, berikut syntax-nya secara lengkap :

SELECT ColumnName1, ColumnName2,  


CASE 
   WHEN condition1 THEN result1  
   WHEN condition2 THEN result2  
   WHEN conditionN THEN resultN  
   ELSE result  
END as alias  
FROM TableName; 

PR
Saya mau minta tolong agar kamu melakukan analisis penjualan di suatu store. Adapun
laporan yang diminta sebagai berikut:

1. Total jumlah seluruh penjualan (total/revenue).


2. Total quantity seluruh produk yang terjual.
3. Total quantity dan total revenue untuk setiap kode produk.
4. Rata - Rata total belanja per kode pelanggan.
5. Selain itu,  jangan lupa untuk menambahkan kolom baru dengan nama ‘kategori’ yang
mengkategorikan total/revenue ke dalam 3 kategori: High: > 300K; Medium: 100K -
300K; Low: <100K.
6. Penggunaan fungsi skalar dan fungsi aggregate dalam operasi string dan numerik di
SQL database
7. Penggunaan GROUP BY dalam mengelompokkan data dan memahami konsep
menggabungkan GROUP BY dengan fungsi aggregate
8. Penggunaan CASE Statement untuk struktur pengambilan keputusan.
9. Mengerjakan mini project yang merupakan integrasi keseluruhan materi dan tentunya
materi-materi pada modul-modul sebelumnya untuk menyelesaikan persoalan bisnis.

Selamat, Aksara! Kamu telah berhasil menyelesaikan rangkaian latihan yang ada pada
module “Fundamental SQL Using FUNCTION and GROUP BY"!
Melihat antusias belajarmu, DQLab ingin memberikan tambahan waktu 1 bulan Belajar Data
Science GRATIS.
Caranya mudah:
1. Upload sertifikat DQLab ‘Fundamental SQL Using FUNCTION and GROUP BY’ di
Linkedin
2. Buatlah caption dengan menceritakan modul yang telah dipelajari dan hal menarik
yang kamu dapatkan
3. Pastikan kamu tag akun Linkedin DQLab dan akun Linkedin Data Mentor @Trisna
Yulia Junita dan tambahkan hashtag #BelajarDataDQLab dan #MulaiBelajarData
4. Batas akhir upload sertifikat: 24 Juni 2020
5. DQLab akan memilih 20 submissions dengan caption paling menarik untuk module
yang dipelajari dan kamu akan mendapatkan email dengan kode voucher untuk dapat
kamu redeem pada akun DQLab Academy tanggal 25 Juni 2020

Menggabungkan Tabel dengan Key Columns

Penjelasan Query Penggabungan Tabel


Penggabungan dua tabel menjadi satu tabel baru menggunakan query SELECT pada subbab
sebelumnya dilakukan dengan cara berikut:

 menuliskan dua nama tabel yang akan digunakan dengan dipisahkan operator koma
(,).
 menuliskan pasangan key columns dengan penghubung operator sama dengan (=) di
bagian filter atau kondisi.

Cara join seperti ini disebut dengan cara join menggunakan operator koma.
Penjelasan Proses Penggabungan Tabel
Mari diperhatikan kembali gambar di bawah ini untuk penjelasan proses penggabungan.

Panah berwarna magenta menunjukkan proses pencocokan dan penggabungan data. Sebagai
contoh: Baris data pertama dengan isi “bayam” pada key
column nama_item (tabel ms_item_kategori), akan mencari isi yang sama di key
column nama_barang (tabel ms_item_warna), dan ditemukan pada baris kedua kemudian
dihubungkan menjadi satu baris di tabel baru hasil penggabungan.
Pencocokan dengan pencarian ini berdasarkan bagian kondisi (conditional clause) pada query
yang ditandai dengan warna kuning berikut.

Setelah seluruh data ditemukan dengan kondisi ini, dan jika tidak menentukan spesifik kolom
maka seluruh kolom data dari kedua tabel akan dimunculkan dengan isi/baris data yang sama
dan terdapat di kedua key column digabungkan menjadi satu baris pada tabel baru. 
Isi data yang ditandai dengan warna merah adalah data yang tidak memiliki pasangan
sehingga tidak bisa digabungkan, dan dengan demikian tidak memiliki data gabungan pada
hasil akhir.
Cara pencocokan dan penggabungan disebut dengan INNER JOIN - dimana isi dari key
column kedua tabel harus cocok satu sama lain baru dapat digabungkan.
Menggunakan Prefix Nama Tabel
Seperti yang dijelaskan sebelumnya, jika akan menggunakan wildcard (*), dan tidak
menentukan spesifik nama kolom yang akan dimunculkan di bagian SELECT, maka secara
default urutan kolom dimulai dengan kolom dari tabel yang dinyatakan pertama di bagian
FROM. Akan tetapi, bisa juga memanfaatkan wildcard dengan menambahkan prefix nama
tabel, dimana dengan merinci prefix nama tabel ini, dimungkinkan untuk menentukan urutan
kolom dari tabel mana yang muncul duluan.
Penggabungan Tanpa Kondisi
Pertanyaan bagus. Penjelasan dan praktek yang kita dilakukan pada materi sebelumnya
adalah penggabungan dua tabel dengan menggunakan kondisi, yaitu terdapat data yang sama
pada key kolom dari kedua tabel. Akan tetapi, memang benar, dalam beberapa case di real
problem, sering kali terdapat permasalahan tertentu dimana kita ingin menggabungkan tabel
tanpa ada kondisi. Proses penggabungan ini juga dapat dilakukan dengan metode koma dan
tanpa menggunakan kondisi relasi antar kolom.”

Contoh select * from ms_item_kategori, ms_item_warna; 


Kesimpulan
Inner join terjadi jika kedua tabel digabungkan melalui kolom kunci atau key column. Syarat
penggabungan adalah dimana Isi data dari key column tabel yang satu harus dapat
dicocokkan dengan isi data dari key column tabel yang lain.
Sedangkan cross join terjadi dari penggabungan tabel tanpa kondisi, dan menghasilkan
seluruh penggabungan data seperti proses perkalian.

Syntax INNER JOIN

“Sudah tahu kan bahwa tujuan JOIN adalah menggabungkan dua atau lebih tabel yang
berbeda di dalam database. Nah, JOIN ini hanya bisa dilakukan apabila tabel - tabel tersebut
memiliki key kolom yang sama. Di SQL, terdapat beberapa tipe JOIN yaitu : INNER JOIN,
LEFT JOIN, RIGHT JOIN, FULL JOIN, dan SELF JOIN. 
Setiap tipe join memiliki tujuan dan hasil query yang berbeda. Pada metode INNER JOIN,
baris dari kedua atau lebih tabel akan dibandingkan untuk mengecek baris - baris mana saja
yang cocok satu sama lain berdasarkan kondisi JOIN yang ditentukan
Penggunaan prefix pada tabel_1.nama_kolom dan tabel_2.nama_kolom ditujukan agar
terdapat kejelasan (clarity) kolom pada tabel mana yang dijadikan acuan dalam proses
INNER JOIN. Tentunya, penggunaan prefix ini ini sangat bermanfaat jika ingin
menggabungkan beberapa tabel. 
Jika masing-masing tabel tersebut dianalogikan sebagai dua himpunan maka proses INNER
JOIN ekivalen dengan INTERSECTION (IRISAN) antara dua himpunan.

Nah, sebelum kita menggunakan INNER JOIN dalam menggabungkan 2 tabel, seperti
yang sudah dijelaskan sebelumnya, kita perlu terlebih dahulu mengetahui kolom mana
yang merupakan key kolom yang akan digunakan dalam JOIN

Memahami Proses dan Hasil Query dengan INNER JOIN


“Sekarang seluruh kolom dari kedua tabel berada di satu tabel dan berisi seluruh kolom -
kolom dari kedua tabel. Jadi, Aku juga dapat dengan mudah mengidentifikasi nama produk
dari setiap kode produk yang dibeli oleh customer.”
“Iya, benar sekali, Aksara. Sekarang perhatikan lebih lanjut dan bandingkan antara
kolom kode_produk pada hasil query dengan INNER JOIN di atas, dengan
kolom kode_produk pada tabel ms_produk. Menurutmu apa yang berbeda?”
“Hm, aku tidak menemukan prod-06 di tabel hasil query, padahal di
tabel ms_produk terdapat data prod-06 yaitu pulpen multifunction + laser DQLAB.”
“Tepat sekali, selanjutnya bandingkan dengan tabel tr_penjualan, apakah kamu menemukan
data prod-06 di tabel tr_penjualan?” tanya Senja kembali menguji kepemahamanku.Dan,
untungnya aku tak pernah mengantuk saat mendengar penjelasan Senja sepanjang materi.
Kalau iya, habislah sudah!
“Tidak ada transaksi dengan kode_produksi prod-06 di tabel tr_penjualan.   Sepertinya
aku mulai paham. INNER JOIN akan mencocokkan key kolom tabel tr_penjualan dengan
key kolom ms_produk, jika value dari key kolom sama - sama ada di kedua tabel , maka
baris itu akan dikembalikan sebagai hasil query dan membentuk satu tabel yang berisi seluruh
kolom dari kedua tabel, sedangkan jika value key kolom hanya terdapat di satu kolom, maka
baris ini tidak akan ditampilkan. prod-06 ada di tabel di ms_produk tetapi tidak ada di data
penjualan sehingga saat penggabungan tabel dengan INNER JOIN, data prod-06 dari
tabel ms_produk tidak akan muncul di hasil query.”
 Oh iya, pada bagian SELECT, kamu boleh memilih kolom mana saja yang ingin kamu
tampilkan setelah kedua tabel di-JOIN.”

Syntax INNER JOIN – Memilih Beberapa Kolom Untuk Ditampilkan


Penggabungan hasil SELECT secara “Vertikal”
“Untuk kasus seperti ini kita perlu menggunakan metode UNION agar kedua tabel tadi
menjadi satu tabel,” jelas Senja.
“UNION itu apa dan bagaimana mengoperasikannya?” tanyaku penuh rasa ingin tahu.
“UNION adalah operator SQL yang digunakan untuk menggabungkan hasil dari 2 atau
lebih SELECT - statement secara “Vertikal”, dengan catatan,” Senja membuka buku
catatannya dan menggesernya padaku untuk dicerna.
Setiap hasil dari SELECT statement yang akan digabungkan (UNION) memiliki jumlah
kolom yang sama
Kolom tersebut juga harus memiliki tipe data yang sama, dan
Kolom tersebut memiliki urutan posisi yang sama.
Berikut format syntax-nya:

“Biar lebih mudah dipahami, mari kita praktekkan dengan tabel yang ingin dianalisis ini.
Kamu bisa perhatikan ya langkah per langkahnya, Aksara.”
Aku menekuri layar laptop menunggu Senja beraksi memperlihatkan contoh.
Menggunakan UNION dengan Klausa WHERE
Aku bertanya pada Senja, “Terus, kalo ada kondisi WHERE, syntaxnya bagaimana?
Misalnya aku hanya ingin menggabungkan tabel yang isinya data penjualan untuk kode
produk prod-04 saja?”
 
”Mudah saja, tinggal tambahkan WHERE di kedua SELECT-statement, seperti berikut ini,”

Jika query-nya dengan benar dituliskan dan kemudian dijalankan maka akan diperoleh:

 
Tugas Praktek:
Lakukanlah hal yang sama dengan yang dicontohkan, akan dipilih kode_pelanggan =
'dqlabcust03' sebagai kondisinya. 
Jika query-nya diketikkan dengan benar maka tabel penggabungan yang tampil dengan
kondisi kode_pelanggan = 'dqlabcust03' adalah:

 Menyelaraskan (Conforming) Kolom


Aku diam sebentar untuk menyimak. Tapi, masih ada pertanyaan yang mengganjal di
benakku.
“Hmm, aku masih bingung, Nja. Kebetulan data penjualan ini berada di kedua tabel A & B
jumlah kolom dan posisinya sama serta nama kolomnya sama. Bagaimana kalau posisi kolom
dari kedua tabelnya tidak sama? Apa tidak bisa di-UNION-kan?”
“Tentu saja bisa, kamu bisa menyelaraskan kolom dari kedua tabel di SELECT-statement.
Mari kita contohkan dengan data dari tabel berikut ini.”
tabel Customers

dan tabel Supplier
 
Jumlah kolom dari kedua tabel tersebut sama - sama 7 kolom, tetapi kolom posisi
kolom ContactName dari kedua tabel tidak sama. Di tabel Customer, posisi
kolom ContactName berada di Kolom ke - 3 sedangkan di tabel supplier berada di kolom
ke-2.
Jika langsung menggabungkan keduanya, tanpa menyelaraskan kolom hasilnya akan sebagai
berikut:

 
Tentunya, ini hasil UNION yang tidak diinginkan, oleh karena itu, urutkan posisi kolom
tersebut di SELECT-Statement dan juga pilih kolom yang ingin digabungkan, sehingga tidak
perlu semua kolom dari kedua tabel di-UNION-kan, seperti berikut ini :

SELECT CustomerName, ContactName, City, PostalCode 


FROM Customers
UNION
SELECT SupplierName, ContactName, City, PostalCode
FROM Suppliers;

 
Jika terdapat perbedaan nama kolom antara SELECT-statement pertama dan SELECT-
statement kedua, maka secara default akan digunakan nama kolom dari SELECT-statement
yang pertama.

 Perbedaan antara UNION dan JOIN


Setelah mengerjakan tugas, aku jadi teringat materiku sebelumnya mengenai JOIN.
Sebenarnya kalau dipikir-pikir fungsi keduanya tampak mirip. Jadi, kapan waktu yang tepat
untuk memaki salah satu darinya? Aku memutuskan menanyakan hal ini pada Senja.
“ Nja, aku sudah paham bagaimana menggunakan UNION tetapi aku masih belum mengerti
bedanya dengan metode JOIN, bukankah keduanya sama – sama untuk menggabungkan data
dari 2 tabel? Lalu, kapan aku perlu pakai JOIN dan kapan aku perlu pakai UNION?”
“Memang benar UNION dan JOIN digunakan untuk menggabungkan data dari dua atau lebih
tabel. Tapi yang membedakan adalah bagaimana tabel - tabel itu digabungkan. Kita
menggunakan JOIN ketika akan menggabungkan tabel secara horizontal, sehingga hasil join
akan memuat kolom - kolom dari kedua atau lebih tabel yang digabungkan. Berikut
gambaran penggabungan tabel dengan metode JOIN,” Senja menampilkan contoh tabel di
layar laptop.
Pada metode JOIN, penggabungan dilakukan berdasarkan key/kolom tertentu yang terdapat
di tabel-tabel yang akan digabungkan dan key/kolom ini memiliki nilai yang saling terkait.
Seperti yang terlihat pada gambar, Kolom A dan Kolom E merupakan key/kolom yang saling
terkait sehingga kedua tabel dapat digabungkan dengan mencocokan nilai dari kedua kolom
ini. Proses JOIN tidak dapat dilakukan jika tidak terdapat key/kolom yang saling terkait di
kedua atau lebih tabel yang akan digabungkan.
 
Untuk UNION seperti yang sudah dijelaskan, digunakan ketika ingin menggabungkan tabel
secara secara vertikal yaitu menggabungkan baris/row dari dua atau lebih tabel. Tidak seperti
JOIN, untuk penggabungan dengan UNION, tidak diperlukan key/kolom yang saling terkait
tetapi UNION mensyaratkan bahwa jumlah kolom dari tabel - tabel yang akan
digabungkankan adalah sama dan berada diposisi yang sama pula. Berikut ilustrasi
penggabungan dengan UNION:
Pada proses penggabungan UNION, tidak terdapat penambahan kolom tetapi jumlah
baris/rows yang akan bertambah. 
Kesimpulan
Pada chapter UNION ini telah dipelajari bagaimana menggabungkan dua tabel secara
vertikal (bertambah barisnya). Tentunya ada syarat yang harus dipenuhi oleh kedua tabel
yang digabungkan dengan UNION, yaitu:

 Setiap hasil dari SELECT statement yang akan digabungkan (UNION) memiliki


jumlah kolom yang sama
 Kolom tersebut juga harus memiliki tipe data yang sama, dan
 Kolom tersebut memiliki urutan posisi yang sama.

Selain itu, mempelajari bagaimana penyelerasan kolom sehingga record/baris yang


ditampilkan pada tabel hasil penggabungan memiliki arti.
 
Perbedaan mendasar dari JOIN dan UNION adalah JOIN menggabungkan 2 tabel atau lebih
berdasarkan baris yang saling berelasi/terkait sedangkan UNION menggabungkan 2 tabel
secara vertikal. 

Hasil Belajarku
Wah, tidak terasa aku telah menyelesaikan modul Fundamental SQL Using INNER JOIN
and UNION. Selama belajar dengan modul ini, aku sudah dapat memahami dan mampu
mempraktikkan:

 Penggabungan dua tabel dengan menggunakan WHERE clause dan teknik cross join.
 Penggabungan dua tabel relasi dengan menggunakan INNER JOIN.
 Penggabungan dua tabel secara vertikal dengan menggunakan UNION.
 Mengerjakan mini project yang merupakan integrasi keseluruhan materi dan tentunya
materi-materi pada modul-modul sebelumnya untuk menyelesaikan persoalan bisnis.

Dengan kemampuan ini, aku lebih pede untuk mengolah data dengan SQL. Keterampilan ini
sendiri adalah 60% aktivitas awal yang akan dilakukan seorang analis. Keep Fighting!

Untuk apa Having digunakan dalam query


HAVING digunakan untuk menggantikan WHERE ketika menggunakan Group BY 
yang datanya di aggregasi.
Secara umum HAVING digunakan setelah melakukan GROUP BY berikut sintaks yang
digunakan:

SELECT nama_kolom
FROM nama_table
GROUP BY nama_kolom
HAVING kondisi

Ayo kita belajar menggunakan HAVING


Contoh)

Pendahuluan Menggunakan MAX, MIN dan AVG Fungsi di Having


Pada bab sebelumnya menjelaskan penggunaan dasar Having dengan menggunakan count.
Pada bab ini akan menjelaskan tentang penggunaan fungsi seperti MAX, MIN dan AVG
dalam penggunaan kondisi filter yang dapat digunakan pada Having untuk melakukan filter
data yang dibutuhkan.
Bagaimana penggunaannya MAX, MIN dan AVG di Having
perhatikan dalam pelajaran setelah ini.

Penggunaan Fungsi MAX pada Having


Dalam klausa kondisi Having dapat menggunakan fungsi MAX sebagai filter hasil dari
aggregasi dari GROUP BY.
Penggunaannya sama dengan fungsi max dengan yang digunakan pada Select secara umum,
tetapi ini digunakan untuk melakukan filter data.
 
Sekarang coba query dibawah ini:

Query diatas akan menampilkan daftar nilai maksimum  pada kolom tersebut yang
disesuaikan sesuai dengan kolom yang digrouping. Sekarang kita dapat menambahkan di
baris berikutnya tentunya dengan menggunakan fungsi Max untuk mendapatkan jumlah
total_price yang berada di atas 1.000.000.

 
Tugas Praktek
Tambahkanlah baris berikutnya (baris ketiga) setelah kamu menuliskan kedua baris di atas.
Perintah di baris ketiga ini ditujukan untuk menentukan nilai maksimal dari pinalty.
Gunakanlah filter untuk nilai MAX pinalty di atas 30000
Jawaban:
select product_id, MAX(total_price) AS total FROM invoice GROUP BY product_id;
select product_id, MAX(total_price) AS total FROM invoice GROUP BY product_id
HAVING MAX(total_price) > 1000000;
select product_id, MAX(pinalty) AS total FROM invoice GROUP BY product_id HAVING
MAX(pinalty) > 30000;

Jawaban:
+------------+---------+
| product_id | total |
+------------+---------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+---------+
| product_id | total |
+------------+---------+
| 10005 | 1200000 |
+------------+---------+
+------------+----------+
| product_id | total |
+------------+----------+
| 10003 | 33000.0 |
| 10004 | 55000.0 |
| 10005 | 132000.0 |
+------------+----------+

Penggunaan Fungsi MIN pada Having


Dalam pembahasan ini, penggunaan fungsi MIN sama halnya dengan fungsi MAX. Fungsi
MIN di having juga digunakan untuk memfilter nilai minimum yang ada pada kolom yang
ditentukan.
Sekarang kita coba menggunakan MIN dalam Having. Coba ikuti query dibawah ini:

Query diatas akan menampilkan daftar nilai minimum pada kolom tersebut yang disesuaikan
sesuai dengan kolom yang di grouping. Sekarang kita tambahkan fungsi Min di Having untuk
memfilter nilai minimum total_price yang dibawah 500.000.

 
Tugas Praktek
Seperti pada tugas praktek sebelumnya. Sekarang kamu tambahkan baris berikutnya agar
nilai minimal dari pinalty dapat ditentukan. Gunakan filter nilai MIN pinalty di
bawah 50000.
Jawaban:

SELECT product_id, MIN(total_price) AS total FROM invoice Group BY product_id;

SELECT product_id, MIN(total_price) AS total FROM invoice Group BY product_id


HAVING MIN(total_price) < 500000;
SELECT product_id, MIN(pinalty) AS total FROM invoice Group BY product_id HAVING
MIN(pinalty) < 50000;

+------------+---------+
| product_id | total |
+------------+---------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+--------+
| product_id | total |
+------------+--------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
+------------+--------+
+------------+---------+
| product_id | total |
+------------+---------+
| 10002 | 25000.0 |
| 10003 | 30000.0 |
+------------+---------+

Penggunaan Fungsi AVG di Having


Penggunaan AVG juga sama dengan penggunaan MAX dan MIN seperti yang telah dibahas
sebelumnya. Fungsi AVG di Having digunakan juga untuk memfilter nilai rata-rata dari
kolom yang dicari. Sekarang kita mencari rata-rata total_price setiap product_id.
Coba ikuti query berikut dengan menggetikkannya di Code editor:

Dari query tersebut mendapatkan list nilai tagihan rata-rata setiap product_id. Sekarang
menggunakan having untuk memfilter nilai rata-rata dari total_price.
 
Tugas Praktek
Dengan menambahkan baris berikutnya atau baris ketiga kamu dapat menentukan nilai rata-
rata dari pinalty dengan menggunakan filter dapat ditentukan pinalty yang berada di
atas 30000. Silakan lakukan di Code editor.

Jawaban :

select product_id, avg(total_price) as total from invoice group by product_id;


select product_id, avg(total_price) as total from invoice group by product_id having
avg(total_price) > 100000;
select product_id, avg(pinalty) as total from invoice group by product_id having avg(pinalty)
> 30000;

+------------+---------+
| product_id | total |
+------------+---------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+---------+
| product_id | total |
+------------+---------+
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+--------+
| product_id | total |
+------------+--------+
| 10003 | 31500 |
| 10004 | 52000 |
| 10005 | 126000 |
+------------+--------+

Mini Quiz
Sekarang untuk lebih mengerti tentang penggunaan Having, mari kita coba selesaikan soal
berikut. 
Lakukan query untuk dapat mengeluarkan product_id, rata-rata nilai pinalty dan jumlah
customer_id yang di group by berdasarkan product_id
yang memiliki jumlah customer_id diatas nilai 20.
Hasil yang diharapkan akan seperti dibawah ini:

+------------+--------------------+-------+
| product_id | AVG(pinalty) | total |
+------------+--------------------+-------+
| 10002 | 26136.363636363636 | 86 |
| 10003 | 31500 | 51 |
| 10004 | 52000 | 34 |
+------------+--------------------+-------+

Jawaban

select product_id, avg(pinalty), avg(pinalty) as total, customer_id from invoice group by


product_id
having count(customer_id) > 20;

+------------+--------------------+-------+
| product_id | AVG(pinalty) | total |
+------------+--------------------+-------+
| 10002 | 26136.363636363636 | 86 |
| 10003 | 31500 | 51 |
| 10004 | 52000 | 34 |
+------------+--------------------+-------+

Penutup
Kali ini kamu sudah berhasil mendapatkan ilmu pengetahuan baru dan juga mempelajari
materi yang baru lagi mengenai Having serta contoh penggunaannya. 
Kesimpulan yang bisa didapatkan adalah : 

1. Menggunakan fungsi SELECT untuk menampilkan data-data yang butuh diketahui


informasinya. 
2. Menggunakan fungsi Group by dan Join untuk memahami penggunaan Having. 

Menghitung nilai Max, Min dan Avg pada penerapan fungsi HAVING

Anda mungkin juga menyukai