Sitemap
Huans

Huans

Hi, my name is Huan, I am Fresh Graduate of Informatics Engineering. I’m currently interested in studying data analysis

AGGREGASI

5 min readOct 14, 2022

--

Baik pada artikel ini saya akan membahas tentang aggregasi pada SQL. Aggregasi digunakan untuk melakukan perhitungan pada sekelompok nilai, fungsi yang menerima koleksi nilai dan mengembalikan nilai tunggal sebagai hasilnya seperti: jumlah data, nilai minimun, nilai maximum dan nilai rata-rata

Di SQL syntax untuk melakukan aggregasi sangat banyak dan memiliki fungsinya masing-masing. Berikut akan kita bahas tentang aggregasi pada SQL beserta contoh penggunaanya

Anda dapat mengunjungi akun github saya jika ingin melihat contoh penggunaan aggregasi dalam kasus nyata menggunakan database di link ini https://github.com/huwea/Campus

Press enter or click to view image in full size
Gambar 1.1 Ilustrasi Aggregasi (https://www.freepik.com/)

PERHATIAN

  • having digunakan apabila harus dikelompokan dulu misal nya sum
  • sedangkan where data di seleksi dulu kemudian di kelompokan
  • where digunakan sebelum group
  • having digunakan setelah group
  • apa yang ada di SELECT harus ada di GROUP dan juga apa yang ada di HAVING harus ada di GROUP , tidak semua HAVING mengikuti isi GROUP hanya yang dibutuhkan untuk seleksi saja
  • Urutan penulisan syntaxnya adalalah = SELECT, FROM, WHERE, GROUP BY, ORDER BY

IN

Perhatikan perbedaan penggunaan OR dan AND dalam IN dan NOT IN

SELECT * FROM rekening WHERE kode_cabang IN (‘BRUM’, ‘BRUL’);

Perintah SQL di atas sama dengan

SELECT * FROM rekening WHERE kode_cabang = ‘BRUM’ OR kode_cabang = ‘BRUL’;

NOT IN

Perhatikan perbedaan penggunaan OR dan AND dalam IN dan NOT IN

SELECT * FROM rekening WHERE kode_cabang NOT IN (‘BRUM’, ‘BRUL’);

Perintah SQL di atas sama dengan (<> == !=)
Nilai NULL tidak akan tampil dalam IN dan NOT IN

SELECT * FROM rekening WHERE kode_cabang <> ‘BRUM’ AND kode_cabang <> ‘BRUL’;

BETWEEN

Nilai yang pertamaa dalam BETWEEN harus lebih kecil dari nilai yang kedua, Bisa untuk string. Perhatikan perbedaan penggunaan AND dan OR dalam BETWEEN dan NOT BETWEEN

SELECT * FROM rekening WHERE soldo BETWEEN 500000 AND 1000000;

Perintah SQL di atas sama dengan

SELECT * FROM rekening WHERE saldo >=500000 AND saldo <= 1000000;

NOT BETWEEN

Perhatikan perbedaan penggunaan AND dan OR dalam BETWEEN dan NOT BETWEEN

SELECT * FROM rekening WHERE saldo NOT BETWEEN 500000 AND 1000000;

Perintah SQL di atas sama dengan

SELECT * FROM rekening WHERE saldo < 500000 OR saldo > 1000000;

AGGREGATE FUNCTIONS

MIN()

Digunakan untuk mencari nilai terkecil dari sekumpulan record

SELECT MIN(saldo) FROM rekening;

Bisa dibatasi dengan WHERE clause sehingga hanya record tertentu yang ditelusuri

SELECT MIN(saldo) FROM rekening WHERE kode_cabang=’BRUS’;

MAX()

Digunakan untuk mencari nilai terbesar dari sekumpulan record

SELECT MAX(saldo) FROM rekening;

Bisa dibatasi dengan WHERE clause sehingga hanya record tertentu yang ditelusuri

SELECT MAX(saldo) FROM rekening WHERE kode_cabang=’BRUS’;

COUNT()

Digunakan untuk menghitung banyaknya record

SELECT COUNT(*) FROM nasabah;

SELECT COUNT(nama_nasabah) FROM nasabah;

SELECT COUNT(alamat_nasabah) FROM nasabah;

Juga bisa dibatasi dengan WHERE caluse, jika kita ingin menghitung banyaknya record yang unit (tidak ada pengulangan), gunakan DISTINCT

SELECT COUNT(DISTINCT alamat_nasabah) FROM nasabah;

AVG()

Digunakan untuk menghitung rata-rata nilai dari sekumpulan record

SELECT AVG(saldo) FROM rekening;

Bisa dibatasi dengan WHERE clause

SELECT AVG(saldo) FROM rekening WHERE kode_cabang=’BRUS’;

Hal yang perlu diperhatihan pada AGGREGATE FUNCTIONS

  • beberapa Aggregate function bisa digabungkan dalam satu perintah SQL

SELECT MIN(saldo), MAX(saldo), AVG(saldo) FROM rekening;

  • Bisa menambahkan ekspresi aritmatika

SELECT SUM(saldo + 10000) FROM rekening;
SELECT SUM(saldo) + 10000 FROM rekening;
SELECT MAX(saldo) — MIN(saldo) FROM rekening;

  • Bisa menggunakan coulmn alias (AS) untuk membuat tampilan lebih profesional

GROUP BY

Digunakan untuk mengelompokkan sekumpulan record berdasarkan (kolom-kolom) tertentu

SELECT jenis_transaksi FROM transaksi GROUP BY jenis_transaksi;
SELECT jenis_transaksi, tanggal FROM transaksi GROUP BY jenis_transaksi, tanggal;

Jika menggunakan GROUP BY, semua field yang ingin ditampilkan dalam SELECT harus tercantum di GROUP BY

Get Huans’s stories in your inbox

Join Medium for free to get updates from this writer.

Contoh yang salah :

SELECT jenis_transaksi, tanggal FROM transaksi GROUP BY jenis_transaksi;
SELECT jenis_transaksi, tanggal FEOM transaksi GROUP BY tanggal;

Contoh yang benar :

SELECT jenis_transaksi, tanggal FROM transaksi GROUP BY jenis_transaksi, tanggal;

HAVING

Merupakan pasangan dari GROUP BY, digunakan untuk membatasi kelompok yang ditampilkan

SELECT jenis_transaksi, tanggal FROM transaksi GROUP BY jenis_transaksi, tanggal HAVING jenis_transaksi = ‘kredit’;

Hasil yang sama bisa didapatkan dengan :

SELECT jenis_transaksi, tanggal FROM transaksi WHERE jenis_transaksi = ‘kredit’ GROUP BY jenis_transaksi,tanggal;

Jika menggunakan HAVING, maka pembatasan dilakuakan setelah hasil dikelompokkan dalam GROUP BY

Jika mengguanakan WHERE, maka pembatasan dilakukan sebelum hasil dikelompokkan dalam GROUP BY

Field yang disebut di HAVING harus ada di GROUP BY, atau berupa aggregate functions

Contoh yang salah :

SELECT jenis_transaksi, tanggal FROM transaksi GROUP BY jenis_transaksi, tanggal HAVING jumlah = 50000;

Contoh yang benar :

SELECT jenis_transaksi, tanggal FROM transaksi WHERE jumlah=50000 GROUP BY jenis_transaksi, tanggal;

GROUP BY dan AGGREGATE

GROUP BY sangat cocok untuk aggregate functions. Dengan menggunakan GROUP BY, kita bisa mengelompokkan record-record dan menghitung min, max, count, sum, dan avg untuk masing-masing kelompok

SELECT kode_cabang, MIN(saldo), MAX(saldo), COUNT(*), SUM(saldo), AVG(saldo) FROM rekening GROUP BY kode_cabang;

Bisa digabungkan dengan tabel join dan ORDER BY :

SELECT nama_cabang, SUM(saldo) FROM rekening NATURAL JOIN cabang_bank GROUP BY nama_cabang ORDER BY nama_cabang;

hasil diatas menampilkan total saldo untuk masing-masing cabang_bank

Perintah SQL di bawah menampilkan banyaknya nasabah yang dilayani oleh masing-masing cabang bank;

SELECT nama_cabang, COUNT(DISTINCT id_nasabah) FROM cabang_bank NATURAL JOIN rekening NATURAL JOIN nasabah_has_rekening GROUP BY nama_cabang ORDER BY nama_cabang;

CONTOH dengan HAVING :

SELECT kode_cabang, SUM(saldo), COUNT(*) FROM rekening GROUP BY kode_cabang HAVING SUM(saldo) >= 5000000 ORDER BY kode_cabang;

Karena SUM(saldo) hanya bisa dihitung setelah hasil dikelompokkan dengan GROUP BY, maka kita harus menggunakan HAVING untuk membatasi hasil berdasarkan SUM(saldo) >= 5000000. Kita tidak bisa menggunakan WHERE

URUTAN

SELECT, FROM, WHERE, GROUP BY, ORDER BY

SQL ANY and ALL Operators

ALL

  • mengembalikan nilai boolean sebagai hasilnya
  • mengembalikan TRUE jika SEMUA nilai subquery memenuhi kondisi
  • digunakan dengan pernyataan SELECT, WHERE dan HAVING
  • ALL berarti bahwa kondisi akan benar hanya jika operasi benar untuk semua nilai dalam rentang.

SELECT n.nama_nasabah, t.jumlah FROM nasabah n INNER JOIN transaksi t ON n.id_nasabah = t.id_nasabahFK WHERE t.jumlah = ALL(SELECT max(jumlah) FROM transaksi);

  • dari contoh diatas jika kita tidak menggunakan ALL maka hanya dapat menampilkan 1 user saja

ANY

  • mengembalikan nilai boolean sebagai hasilnya
  • mengembalikan TRUE jika APAPUN dari nilai subquery memenuhi kondisi
  • APAPUN berarti kondisi akan benar jika operasi benar untuk salah satu nilai dalam rentang.

Anda dapat mengunjungi arkikel lain saya tentang Sytax SQL Data Definition Language (DDL), Syntax SQL Data Manipulation Language (DML), JOIN SQL, dan SubQuery SQL

Mungkin sekian untuk artikel saya tentang AGGREGASI, see you:)

--

--

Huans
Huans

Hi, my name is Huan, I am Fresh Graduate of Informatics Engineering. I’m currently interested in studying data analysis