Pareto Analysis 80/20 dengan SQL
Blog/Tutorial SQL/Pareto Analysis 80/20 dengan SQL

Pareto Analysis 80/20 dengan SQL

BimaBima
·23 Juli 2026·10 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Pareto analysis di SQL mengurutkan item dari kontribusi terbesar, menghitung running total, lalu membaginya dengan grand total jadi persen kumulatif. Item yang masuk sampai persen kumulatif 80% adalah kelompok vital. Teknik intinya pakai window function SUM() OVER (ORDER BY revenue DESC).

Pareto analysis di SQL itu cara nemuin sebagian kecil item yang nyumbang mayoritas hasil. Prinsip 80/20 bilang sekitar 20% produk sering ngasih 80% revenue.

Buat ngerjainnya, kamu urutin item dari kontribusi terbesar, hitung total berjalan, lalu ubah jadi persen kumulatif. Item yang nyampe 80% pertama itulah kelompok yang paling penting kamu jaga.

Di artikel ini kamu bakal belajar cara ngitung running total pakai window function, ngubahnya jadi persen kumulatif, dan baca hasilnya buat keputusan bisnis nyata.

Apa itu Pareto analysis?

Pareto analysis adalah teknik buat ngurutin penyebab dari yang paling berdampak, lalu lihat berapa sedikit penyebab yang bikin mayoritas dampak. Namanya dari prinsip 80/20: sering kali 80% hasil datang dari 20% sebab. Di konteks penjualan, ini berarti segelintir produk sering nyetir sebagian besar revenue.

Buat ngerjainnya di SQL, kamu butuh tiga langkah:

  1. Jumlahin revenue per item, urut dari terbesar.
  2. Hitung running total, yaitu total yang nambah terus dari atas ke bawah.
  3. Bagi running total dengan grand total buat dapat persen kumulatif.

Kunci teknisnya di langkah kedua, dan itu pakai window function. Kalau kamu belum kenal, baca dulu pengantar window function di SQL.

Gimana cara hitung revenue per produk di SQL?

Langkah pertama, jumlahin revenue tiap produk pakai GROUP BY, lalu urut dari yang terbesar. Ini fondasi sebelum ngitung kumulatif.

SELECT
  produk,
  SUM(total) AS revenue
FROM transaksi
GROUP BY produk
ORDER BY revenue DESC;

Query ini kasih tabel produk dengan total revenue masing-masing, diurutkan dari juara. Buat pendalaman fungsi penjumlahan, cek fungsi agregat SQL.

Gimana cara hitung running total dengan window function?

Running total itu total yang terus nambah sepanjang urutan baris. Pakai SUM() OVER (ORDER BY revenue DESC), SQL njumlahin revenue baris ini plus semua baris di atasnya.

WITH per_produk AS (
  SELECT produk, SUM(total) AS revenue
  FROM transaksi
  GROUP BY produk
)
SELECT
  produk,
  revenue,
  SUM(revenue) OVER (ORDER BY revenue DESC) AS running_total
FROM per_produk
ORDER BY revenue DESC;

Baris teratas running total-nya sama dengan revenue-nya sendiri. Baris kedua nambah revenue baris pertama. Terus gitu sampai baris terakhir, yang running total-nya sama dengan grand total semua produk.

Gimana cara ubah running total jadi persen kumulatif?

Buat dapat persen kumulatif, bagi running total dengan grand total, lalu kali 100. Grand total-nya dihitung pakai SUM() OVER () tanpa ORDER BY, yang njumlahin semua baris.

WITH per_produk AS (
  SELECT produk, SUM(total) AS revenue
  FROM transaksi
  GROUP BY produk
)
SELECT
  produk,
  revenue,
  SUM(revenue) OVER (ORDER BY revenue DESC) AS running_total,
  ROUND(
    100.0 * SUM(revenue) OVER (ORDER BY revenue DESC)
    / SUM(revenue) OVER (),
    1
  ) AS persen_kumulatif
FROM per_produk
ORDER BY revenue DESC;

Kolom persen_kumulatif nunjukin berapa persen total revenue yang udah kekumpul sampai baris itu. Produk pertama yang persen kumulatifnya nyampe 80% adalah batas kelompok vital kamu. Buat teknik persentase lain, baca cara menghitung persentase di SQL.

Gimana cara tandai kelompok 80% teratas?

Buat ngasih label kelompok, bungkus hasil tadi pakai CTE lagi, lalu pakai CASE buat nandain baris sampai 80%. Ini bikin hasilnya langsung kebaca tanpa hitung manual.

WITH pareto AS (
  -- query persen_kumulatif dari langkah sebelumnya
  SELECT produk, revenue,
    ROUND(100.0 * SUM(revenue) OVER (ORDER BY revenue DESC)
      / SUM(revenue) OVER (), 1) AS persen_kumulatif
  FROM (
    SELECT produk, SUM(total) AS revenue
    FROM transaksi GROUP BY produk
  ) t
)
SELECT
  produk, revenue, persen_kumulatif,
  CASE WHEN persen_kumulatif <= 80 THEN 'Vital (80%)'
       ELSE 'Sisanya' END AS kelompok
FROM pareto
ORDER BY revenue DESC;

Contoh kasus: produk vital toko_berkah

Toko_berkah punya 480 jenis produk di tabel transaksi selama 6 bulan. Aku jalanin analisa Pareto buat tau produk mana yang beneran nyetir revenue.

Hasilnya jelas: dari 480 produk, cuma 71 produk yang masuk kelompok 80% teratas. Artinya 14,8% produk nyumbang 80% revenue. Angkanya nggak persis 20/80, tapi polanya sama, mayoritas hasil datang dari sebagian kecil item.

Yang lebih menarik, 5 produk teratas sendiri nyumbang 31% revenue. Semuanya kategori Sembako: beras, minyak goreng, gula, telur, dan tepung. Sisanya, 409 produk yang cuma nyumbang 20%, banyak yang stoknya numpuk dan jarang laku.

Insight ini langsung kepakai. Tim mutusin prioritasin ketersediaan stok 71 produk vital, dan mulai kurangi variasi produk ekor panjang yang bikin modal nyangkut. Modal yang tadinya ke-lock di produk lambat, dialihkan ke produk cepat.

Kesalahan umum waktu bikin Pareto di SQL

  • Lupa ORDER BY di window function. Tanpa ORDER BY revenue DESC, running total-nya salah dan persen kumulatifnya ngaco.
  • Pakai 100 bukan 100.0. Di sebagian database, pembagian integer motong desimal. Pakai 100.0 biar hasilnya pecahan.
  • Grand total pakai ORDER BY. SUM() OVER () buat grand total harus tanpa ORDER BY, biar dia njumlahin semua baris, bukan kumulatif.
  • Salah tafsir batas 80%. 80% itu panduan, bukan hukum. Sesuaikan sama konteks bisnismu.

FAQ

Apakah analisa Pareto selalu menghasilkan rasio persis 80/20?

Nggak. 80/20 itu pola umum, bukan angka pasti. Di data nyata kamu bisa nemu 70/30, 90/10, atau 85/15 tergantung bisnisnya. Yang penting bukan angka persisnya, tapi kenyataan bahwa sebagian kecil item nyumbang mayoritas hasil. Fokusnya di nemuin kelompok vital itu, berapa pun rasio persisnya, lalu ambil keputusan dari situ.

Bisa nggak bikin Pareto tanpa window function?

Bisa, tapi jauh lebih ribet. Tanpa window function, kamu harus pakai self join atau subquery berkorelasi buat ngitung running total, dan itu lambat plus susah dibaca. Window function SUM() OVER (ORDER BY ...) dirancang khusus buat kasus ini. Kalau database kamu mendukungnya, dan hampir semua database modern mendukung, pakai window function adalah cara paling bersih dan cepat.

Gimana cara Pareto untuk kategori, bukan produk?

Tinggal ganti kolom di GROUP BY dari produk jadi kategori. Sisa querynya sama persis: jumlahin revenue per kategori, urut menurun, hitung running total dan persen kumulatif. Pareto bisa dipakai di level mana aja, produk, kategori, cabang, atau pelanggan. Pilih level yang keputusannya bisa kamu ambil. Kalau kamu mau atur stok, level produk paling berguna.

Apa beda running total dan total biasa di SQL?

Total biasa dari SUM() dengan GROUP BY ngasih satu angka per grup. Running total dari SUM() OVER (ORDER BY ...) ngasih angka yang nambah tiap baris, ngikutin urutan. Jadi tiap baris punya nilai running total sendiri yang isinya jumlah baris itu plus semua baris sebelumnya. Running total inilah yang bikin analisa Pareto dan grafik kumulatif jadi mungkin.

Apakah Pareto bisa dipakai selain untuk revenue?

Bisa banget. Prinsip 80/20 berlaku di banyak hal: keluhan pelanggan, cacat produksi, sumber trafik, atau jam kerja per tugas. Kamu tinggal ganti kolom yang dijumlah sesuai yang mau dianalisa. Misalnya, cari 20% jenis keluhan yang bikin 80% tiket support. Tekniknya sama, cuma metriknya beda. Ini yang bikin Pareto jadi alat serbaguna buat prioritas.

Penutup

Yang perlu kamu inget: Pareto butuh tiga langkah, jumlahin per item dan urut menurun, hitung running total pakai SUM() OVER (ORDER BY), lalu bagi dengan grand total buat persen kumulatif. Kelompok yang nyampe 80% pertama itu prioritas kamu.

Sekarang coba di data penjualan kamu sendiri. Mau latihan window function dengan dataset Indonesia? Cek NgulikSQL buat praktek langsung di browser.

Lanjut baca cara menghitung persentase di SQL, atau lihat dokumentasi resmi window function PostgreSQL buat pendalaman.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Composite Index di SQL: Cara Kerja dan Urutan Kolom
Tutorial SQL
8 Oktober 2026•8 menit baca

Composite Index di SQL: Cara Kerja dan Urutan Kolom

Composite index itu index atas beberapa kolom sekaligus. Urutan kolomnya nentuin query mana yang kebantu, lewat aturan leftmost prefix.

BimaBima
Menghitung Stickiness (DAU/MAU) di SQL
Tutorial SQL
5 Oktober 2026•10 menit baca

Menghitung Stickiness (DAU/MAU) di SQL

Stickiness ngukur seberapa sering user balik lagi. Ini cara hitung DAU, MAU, dan rasio stickiness pakai SQL, plus contoh aplikasi UMKM.

BimaBima
Menghitung DAU dan MAU dengan SQL
Tutorial SQL
3 Oktober 2026•9 menit baca

Menghitung DAU dan MAU dengan SQL

DAU dan MAU dua metrik wajib buat produk digital. Ini cara hitungnya pakai SQL, lengkap query DISTINCT, per bulan, sampai rasio stickiness.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore