Menghitung Bounce Rate dengan SQL
Blog/Tutorial SQL/Menghitung Bounce Rate dengan SQL

Menghitung Bounce Rate dengan SQL

BimaBima
·18 September 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Bounce rate adalah persentase sesi yang cuma memuat satu halaman lalu pergi tanpa interaksi lanjutan. Di SQL, kamu hitung dengan mengelompokkan event per sesi, menandai sesi yang jumlah pageview-nya satu, lalu membaginya dengan total sesi dikali 100. Pola paling rapi pakai CTE untuk menghitung pageview per sesi dulu.

Bounce rate adalah persentase sesi yang cuma buka satu halaman lalu pergi tanpa lanjut ke halaman lain. Di SQL, kamu hitung dengan ngelompokin event per sesi, nandain sesi yang pageview-nya cuma satu, lalu dibagi total sesi dikali 100.

Angka ini ngasih tau seberapa cepat pengunjung kabur. Bounce tinggi di landing page produk artinya ada yang bikin orang ilfeel sebelum sempat lihat lebih jauh.

Aku tunjukin query dasarnya pakai CTE, cara pecah per landing page, sama definisi yang perlu kamu tentuin dulu biar angkanya nggak nyasar.

Apa itu bounce rate dalam SQL?

Bounce rate adalah rasio sesi satu-halaman terhadap total sesi, ditulis dalam persen. Sebuah sesi disebut bounce kalau pengunjung datang, lihat satu halaman, lalu pergi tanpa interaksi lanjutan. Di SQL, kamu ngukurnya dengan ngitung jumlah pageview per sesi lalu nyaring yang cuma satu.

Sebelum nulis query, tentuin dulu apa arti bounce buat kamu. Cara klasik ngitung dari jumlah pageview. Cara modern kayak GA4 ngitung dari ada atau nggaknya engagement, misalnya durasi minimal 10 detik.

Gimana rumus bounce rate?

Rumusnya: jumlah sesi bounce dibagi total sesi, dikali 100. Kalau 700 dari 1.000 sesi cuma buka satu halaman, bounce rate-nya 70%.

Bounce Rate = (Sesi Satu-Halaman / Total Sesi) x 100

Tantangan di SQL ada di langkah persiapan. Kamu perlu ngitung dulu berapa pageview tiap sesi sebelum bisa nandain mana yang bounce. Di sinilah CTE kepakai buat mecah query jadi dua tahap yang jelas.

Cara menghitung bounce rate dengan SQL

Anggap kamu punya tabel events dengan satu baris per pageview, berisi kolom session_id dan page. Langkah pertama, hitung pageview per sesi. Langkah kedua, hitung persentase sesi yang pageview-nya satu.

WITH sesi AS (
  SELECT session_id, COUNT(*) AS jml_pageview
  FROM events
  GROUP BY session_id
)
SELECT
  COUNT(*) AS total_sesi,
  COUNT(*) FILTER (WHERE jml_pageview = 1) AS sesi_bounce,
  ROUND(
    COUNT(*) FILTER (WHERE jml_pageview = 1) * 100.0
    / NULLIF(COUNT(*), 0),
  2) AS bounce_rate
FROM sesi;

CTE bernama sesi ngerjain GROUP BY buat ngitung pageview tiap sesi. Query utama lalu ngitung berapa banyak sesi yang jml_pageview-nya 1. Perkalian dengan 100.0 mastiin hasilnya desimal, dan NULLIF jagain dari bagi nol.

Kalau database kamu nggak dukung klausa FILTER, ganti pakai SUM dengan CASE WHEN:

ROUND(
  SUM(CASE WHEN jml_pageview = 1 THEN 1 ELSE 0 END) * 100.0
  / NULLIF(COUNT(*), 0),
2) AS bounce_rate

Cara hitung bounce rate per landing page

Angka total berguna, tapi yang bikin keputusan adalah pecahan per halaman masuk. Tambahin landing page ke CTE, lalu GROUP BY di query utama:

WITH sesi AS (
  SELECT
    session_id,
    COUNT(*) AS jml_pageview,
    MIN(page) AS landing_page
  FROM events
  GROUP BY session_id
)
SELECT
  landing_page,
  COUNT(*) AS sesi,
  ROUND(
    COUNT(*) FILTER (WHERE jml_pageview = 1) * 100.0
    / NULLIF(COUNT(*), 0),
  2) AS bounce_rate
FROM sesi
GROUP BY landing_page
ORDER BY bounce_rate DESC;

Catatan soal MIN(page): ini nyederhanain halaman masuk jadi nilai terkecil secara abjad, bukan yang paling awal secara waktu. Buat presisi, ganti pakai halaman dengan timestamp paling awal per sesi lewat window function.

Contoh kasus: bounce rate landing page toko_berkah

Anggap toko_berkah jalanin dua landing page: satu halaman promo diskon dari iklan, satu halaman katalog dari pencarian. Kamu jalanin query per landing page dan dapat hasil ini:

Landing PageSesiBounce Rate
/promo-diskon1.90071%
/katalog2.40038%

Halaman promo diskon punya bounce rate 71%, hampir dua kali halaman katalog yang cuma 38%. Padahal promo yang narik trafik paling banyak dari iklan.

Insight ini nyetir perbaikan. Orang yang klik iklan diskon banyak yang langsung pergi, mungkin karena halaman promonya nggak ngasih jalan jelas buat lanjut belanja. Ini yang perlu dibenerin sebelum nambah budget iklan.

Kesalahan umum waktu hitung bounce rate

Kesalahan pertama: lupa perkalian desimal. Nulis sesi_bounce / total_sesi tanpa 100.0 bikin hasilnya kebulet jadi 0. Selalu kali dengan 100.0.

Kesalahan kedua: salah struktur tabel. Bounce rate butuh satu baris per pageview biar bisa dihitung per sesi. Kalau tabelmu cuma nyimpen satu baris ringkasan per sesi, kamu nggak bisa tau jumlah pageview-nya.

Kesalahan ketiga: nggak nentuin definisi bounce. Ngitung pakai pageview beda hasil dari ngitung pakai engagement. Samain definisi di seluruh laporan biar angkanya bisa dibandingin antar waktu.

Pertanyaan yang sering muncul soal bounce rate SQL

Gimana ngitung bounce rate versi GA4 pakai durasi?

Ganti syarat bounce dari jumlah pageview ke engagement. Contoh, tandain sesi sebagai engaged kalau durasinya di atas 10 detik atau punya event penting, lalu bounce rate jadi 100% dikurangi engagement rate. Kamu perlu kolom durasi atau flag event di tabel biar bisa nerapin definisi ini.

Apa bounce rate bisa dihitung tanpa CTE?

Bisa, pakai subquery di dalam FROM. Tapi CTE bikin query jauh lebih kebaca karena mecah logikanya jadi dua tahap yang jelas: hitung pageview per sesi dulu, baru hitung persentasenya. Buat query yang bakal dibaca lagi nanti, CTE lebih ramah.

Gimana cara bandingin bounce rate antar bulan?

Tambahin kolom bulan ke CTE lewat DATE_TRUNC pada timestamp sesi, lalu GROUP BY bulan di query utama. Kamu bakal dapat satu baris bounce rate per bulan, gampang dibandingin buat lihat apakah perbaikan halaman beneran nurunin angka atau nggak.

Kesimpulan

Menghitung bounce rate dengan SQL intinya hitung pageview per sesi pakai CTE, tandain sesi satu-halaman, lalu bagi total sesi dikali 100.0. Pecah per landing page buat tau halaman mana yang bikin orang cepat kabur.

Mau lanjut ke metrik lain? Baca cara hitung conversion rate buat lihat sisi keberhasilannya, atau DAU dan MAU dengan SQL buat ukur pengguna aktif.

Referensi soal CTE ada di dokumentasi PostgreSQL WITH queries. Latihan query kayak gini langsung di browser lewat NgulikSQL, tanpa install database.

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