Menghitung Conversion Rate dengan SQL
TL;DR
Conversion rate adalah persentase pengunjung yang menyelesaikan aksi target, misalnya beli. Di SQL, kamu hitung dengan membagi jumlah yang konversi dengan total pengunjung lalu dikali 100, pakai kombinasi COUNT dan CASE WHEN atau FILTER. Selalu pakai NULLIF di pembagi biar aman dari error bagi nol.
Conversion rate adalah persentase pengunjung yang nyelesaiin aksi target, misalnya beli produk. Di SQL, kamu hitung dengan bagi jumlah yang beli sama total pengunjung, lalu kali 100. Rumus intinya: order / pengunjung * 100.
Angka ini yang dipakai buat nilai seberapa efektif sebuah channel atau halaman. Naik dari 2% ke 3% keliatan kecil, tapi itu 50% lebih banyak penjualan dari trafik yang sama.
Aku tunjukin query dasarnya, cara pecah per channel, sama jebakan bagi nol yang sering bikin hasilnya salah.
Apa itu conversion rate dalam SQL?
Conversion rate adalah rasio antara jumlah aksi yang berhasil sama total kesempatan, ditulis dalam persen. Di SQL, kamu ngitungnya dengan ngebagi hasil COUNT dari baris yang memenuhi syarat dengan COUNT total, lalu dikali 100. Aksi target bisa apa aja: beli, daftar, klik, atau isi form.
Yang penting kamu tentuin dulu dua hal: apa yang dihitung sebagai konversi, dan apa yang dihitung sebagai total. Salah nentuin penyebut bikin angkanya nggak bisa dibandingin.
Gimana rumus conversion rate?
Rumusnya sederhana: jumlah konversi dibagi jumlah pengunjung, dikali 100. Kalau 30 dari 1.000 pengunjung beli, conversion rate-nya 3%.
Conversion Rate = (Jumlah Konversi / Total Pengunjung) x 100
Di SQL, tantangannya ada di dua tempat. Pertama, ngitung baris bersyarat pakai CASE WHEN atau FILTER. Kedua, mastiin pembagiannya nghasilin desimal, bukan integer yang kebulet jadi 0.
Cara menghitung conversion rate dengan SQL
Anggap kamu punya tabel sessions dengan satu baris per kunjungan, dan kolom is_order bernilai true kalau kunjungan itu berujung beli. Query dasarnya:
SELECT
COUNT(*) AS total_sesi,
SUM(CASE WHEN is_order THEN 1 ELSE 0 END) AS total_order,
ROUND(
SUM(CASE WHEN is_order THEN 1 ELSE 0 END) * 100.0
/ NULLIF(COUNT(*), 0),
2) AS conversion_rate
FROM sessions;
Ada tiga bagian penting di sini. CASE WHEN ngubah kondisi jadi 1 atau 0, lalu SUM ngejumlahin yang 1. Perkalian dengan 100.0 mastiin hasilnya desimal. COUNT di penyebut ngitung total baris.
Kalau database kamu PostgreSQL, ada versi yang lebih bersih pakai klausa FILTER:
SELECT
ROUND(
COUNT(*) FILTER (WHERE is_order) * 100.0
/ NULLIF(COUNT(*), 0),
2) AS conversion_rate
FROM sessions;
FILTER cuma ngitung baris yang lolos kondisi. Hasilnya sama, tapi lebih gampang dibaca sekali lihat.
Cara hitung conversion rate per channel
Angka total berguna, tapi yang bikin keputusan adalah pecahan per channel. Tambahin GROUP BY buat lihat channel mana yang paling efektif:
SELECT
channel,
COUNT(*) AS sesi,
SUM(CASE WHEN is_order THEN 1 ELSE 0 END) AS order_count,
ROUND(
SUM(CASE WHEN is_order THEN 1 ELSE 0 END) * 100.0
/ NULLIF(COUNT(*), 0),
2) AS conversion_rate
FROM sessions
GROUP BY channel
ORDER BY conversion_rate DESC;
Sekarang kamu bisa lihat channel mana yang ngasih trafik paling berkualitas, bukan cuma paling banyak. Channel dengan sesi sedikit tapi conversion rate tinggi kadang lebih berharga dari channel rame yang jarang beli.
Contoh kasus: toko_berkah jualan online
Anggap toko_berkah, UMKM sembako, jualan lewat tiga channel: Instagram, WhatsApp broadcast, sama marketplace. Kamu jalanin query per channel dan dapat hasil ini:
| Channel | Sesi | Order | Conversion Rate |
|---|---|---|---|
| WhatsApp Broadcast | 820 | 50 | 6,10% |
| Marketplace | 2.400 | 96 | 4,00% |
| 3.100 | 87 | 2,81% |
Instagram bawa trafik paling banyak, tapi conversion rate-nya paling rendah. WhatsApp broadcast bawa trafik paling sedikit, tapi tiap kunjungan dua kali lebih mungkin berujung beli.
Insight ini nyetir keputusan. Kalau budget iklan mau ditambah, WhatsApp yang paling worth digenjot, bukan Instagram yang keliatan rame tapi tipis hasilnya.
Kesalahan umum waktu hitung conversion rate
Kesalahan pertama: lupa perkalian desimal. Nulis total_order / COUNT(*) tanpa 100.0 bikin hasilnya kebulet jadi 0 karena pembagian integer. Selalu kali dengan 100.0.
Kesalahan kedua: nggak jaga bagi nol. Kalau ada grup tanpa pengunjung, penyebut jadi 0 dan query error. Bungkus penyebut pakai NULLIF(COUNT(*), 0).
Kesalahan ketiga: campur satuan penyebut. Ngitung konversi per user tapi penyebutnya per sesi bikin angkanya nggak masuk akal. Samain: kalau pembilang DISTINCT user, penyebut juga DISTINCT user.
Pertanyaan yang sering muncul soal conversion rate SQL
Pakai SUM CASE WHEN atau COUNT FILTER lebih bagus?
Dua-duanya benar. COUNT dengan FILTER lebih ringkas dan gampang dibaca, tapi cuma ada di PostgreSQL dan beberapa database modern. SUM dengan CASE WHEN jalan di hampir semua database termasuk MySQL lama. Kalau kamu mau query yang portabel, pakai SUM CASE WHEN.
Gimana hitung conversion rate antar dua tabel terpisah?
Kalau pengunjung dan order ada di tabel berbeda, pakai subquery. Contoh: SELECT (SELECT COUNT(DISTINCT user_id) FROM orders) * 100.0 / NULLIF((SELECT COUNT(DISTINCT user_id) FROM visits), 0). Pastikan keduanya ngitung entitas yang sama, biasanya user unik.
Berapa conversion rate yang dianggap bagus?
Nggak ada angka ajaib. Rata-rata e-commerce ada di 1% sampai 3%, tapi ini beda jauh antar industri dan channel. Yang lebih berguna adalah bandingin conversion rate kamu antar waktu dan antar channel, bukan sama patokan umum yang belum tentu relevan.
Kesimpulan
Menghitung conversion rate dengan SQL intinya bagi jumlah konversi sama total pengunjung, dikali 100.0, dengan NULLIF di penyebut. Pecah per channel pakai GROUP BY buat tau mana yang paling efektif.
Mau lanjut ke metrik lain? Baca cara hitung Average Order Value buat lihat nilai tiap transaksi, atau bounce rate dengan SQL buat lihat sisi kegagalannya.
Referensi soal fungsi agregat dan FILTER ada di dokumentasi PostgreSQL. Latihan query kayak gini langsung di browser lewat NgulikSQL, tanpa install database.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
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.
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.
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.