Mengambil Data · Pelajaran 5 dari 9

Agregasi dan GROUP BY

10 menit baca · BelajarCode

SQL
1CREATE TABLE penjualan (2    id INTEGER PRIMARY KEY,3    tanggal TEXT,4    produk TEXT,5    kategori TEXT,6    jumlah INTEGER,7    harga INTEGER8);910INSERT INTO penjualan (tanggal, produk, kategori, jumlah, harga) VALUES11    ('2026-09-01', 'Kopi susu', 'Minuman', 12, 15000),12    ('2026-09-01', 'Roti bakar', 'Makanan', 5, 18000),13    ('2026-09-02', 'Kopi susu', 'Minuman', 15, 15000),14    ('2026-09-02', 'Teh tarik', 'Minuman', 8, 12000),15    ('2026-09-03', 'Roti bakar', 'Makanan', 7, 18000),16    ('2026-09-03', 'Mi goreng', 'Makanan', 4, 20000),17    ('2026-09-03', 'Kopi susu', 'Minuman', 10, 15000);1819SELECT COUNT(*) AS transaksi,20       SUM(jumlah) AS porsi,21       SUM(jumlah * harga) AS pendapatan,22       MIN(harga) AS termurah,23       MAX(harga) AS termahal24FROM penjualan;
Hasil
transaksi | porsi | pendapatan | termurah | termahal
7 | 61 | 947000 | 12000 | 20000

Fungsi agregat

Fungsi agregat
FungsiHasil
COUNT(*)Banyak baris
COUNT(kolom)Banyak nilai yang tidak NULL
SUM(kolom)Jumlah
AVG(kolom)Rata-rata
MIN(kolom), MAX(kolom)Terkecil, terbesar

GROUP BY

GROUP BY membagi baris menjadi kelompok, lalu fungsi agregat dihitung untuk setiap kelompok.

SQL
1SELECT produk,2       SUM(jumlah) AS porsi,3       SUM(jumlah * harga) AS pendapatan4FROM penjualan5GROUP BY produk6ORDER BY pendapatan DESC;
Hasil
produk | porsi | pendapatan
Kopi susu | 37 | 555000
Roti bakar | 12 | 216000
Teh tarik | 8 | 96000
Mi goreng | 4 | 80000

WHERE atau HAVING?

  • WHERE menyaring baris sebelum dikelompokkan.
  • HAVING menyaring kelompok setelah agregat dihitung.
SQL
1SELECT kategori,2       COUNT(*) AS transaksi,3       ROUND(AVG(jumlah), 1) AS rata_porsi4FROM penjualan5WHERE tanggal >= '2026-09-02'6GROUP BY kategori7HAVING COUNT(*) >= 2;
Hasil
kategori | transaksi | rata_porsi
Makanan | 2 | 5.5
Minuman | 3 | 11.0

Baris tanggal 1 September dibuang oleh WHERE, lalu hanya kategori dengan minimal dua transaksi yang dipertahankan oleh HAVING.

Kolom di SELECT dan GROUP BY

Jika memakai GROUP BY, setiap kolom di SELECT sebaiknya ada di GROUP BY atau dibungkus fungsi agregat. Sebagian DBMS menolak query yang melanggarnya, dan yang mengizinkan pun bisa memberi nilai yang tidak bisa diandalkan.

Cek pemahaman

Untuk menampilkan produk yang total porsinya lebih dari 10, klausa apa yang dipakai?

Latihan

Pendapatan harian

Tampilkan pendapatan per tanggal, beserta banyak transaksinya, urut dari tanggal terawal.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi