PERCENTILE_CONT vs PERCENTILE_DISC di SQL
Blog/Tutorial SQL/PERCENTILE_CONT vs PERCENTILE_DISC di SQL

PERCENTILE_CONT vs PERCENTILE_DISC di SQL

BimaBima
·23 November 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

PERCENTILE_CONT dan PERCENTILE_DISC sama-sama ngitung percentile di SQL, tapi hasilnya beda. PERCENTILE_CONT pakai interpolasi, jadi bisa ngasih angka yang nggak ada di data, cocok buat median dan statistik kontinu. PERCENTILE_DISC selalu ngembaliin nilai nyata dari data, cocok kalau kamu butuh angka yang beneran ada seperti harga aktual. Keduanya pakai sintaks WITHIN GROUP dan butuh ORDER BY.

PERCENTILE_CONT dan PERCENTILE_DISC sama-sama ngitung percentile di SQL, tapi hasilnya beda. Satu pakai interpolasi, satu ambil nilai nyata dari data.

Kelihatannya sepele, tapi salah pilih bisa bikin angka median atau P90 kamu meleset tanpa error apa pun. Query jalan, hasilnya keluar, tapi maknanya beda.

Aku bandingin dua fungsi ini dari cara kerjanya, hasil di data yang sama, sampai kapan masing-masing lebih tepat dipakai.

Apa beda PERCENTILE_CONT dan PERCENTILE_DISC?

Bedanya ada di cara mereka nentuin nilai percentile. PERCENTILE_CONT ngitung lewat interpolasi antara dua nilai terdekat, jadi hasilnya bisa angka yang nggak ada di data. PERCENTILE_DISC ambil satu nilai nyata dari data yang posisinya paling pas. CONT itu continuous, DISC itu discrete.

AspekPERCENTILE_CONTPERCENTILE_DISC
Cara kerjaInterpolasi antar dua nilaiAmbil nilai nyata dari data
HasilBisa angka yang nggak ada di dataSelalu nilai yang beneran ada
Cocok buatMedian, statistik kontinuNilai aktual, data ordinal

Konsep percentile sendiri bisa kamu dalami di glossary kuartil, karena kuartil cuma percentile di titik 25, 50, dan 75.

Gimana hasilnya beda di data yang sama?

Ambil data sederhana: nilai 10 dan 20. Kita minta median, alias percentile ke-50, dari dua fungsi.

SELECT
  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY nilai) AS median_cont,
  PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY nilai) AS median_disc
FROM (VALUES (10), (20)) AS t(nilai);

Hasilnya beda. median_cont ngasih 15, yaitu rata-rata dua nilai tengah lewat interpolasi. median_disc ngasih 10, yaitu nilai nyata yang posisinya pas di titik median menurut aturannya.

Di data besar dan nyebar, selisih ini kecil. Tapi di data kecil atau yang loncat-loncat, bedanya kelihatan. Makanya kamu harus tau mana yang kamu butuh sebelum nulis query.

Kapan pakai PERCENTILE_CONT?

Pakai PERCENTILE_CONT buat kebanyakan analisis statistik, terutama median dan percentile nilai kontinu seperti pendapatan, durasi, atau nilai transaksi. Interpolasi bikin hasilnya halus dan mewakili sebaran, sama kayak cara median dihitung di statistik umum dan di Excel.

Ini pilihan default kalau kamu ragu. Kenapa? Karena hasilnya konsisten sama yang orang harapin dari kata median. Buat dasar cara ngitung median di SQL, ada panduan terpisah di median dan percentile SQL.

SELECT
  PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY nilai) AS p25,
  PERCENTILE_CONT(0.5)  WITHIN GROUP (ORDER BY nilai) AS median,
  PERCENTILE_CONT(0.9)  WITHIN GROUP (ORDER BY nilai) AS p90
FROM transaksi;

Kapan pakai PERCENTILE_DISC?

Pakai PERCENTILE_DISC kalau kamu butuh nilai yang beneran ada di data. Contohnya nyari harga produk aktual di percentile ke-90 buat patokan harga premium. Interpolasi nggak masuk akal di sini, soalnya kamu nggak bisa jualan barang dengan harga hasil rata-rata dua produk beda.

SELECT
  kategori,
  PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY harga) AS harga_p90_aktual
FROM produk
GROUP BY kategori;

DISC juga lebih pas buat data ordinal, yaitu data yang urutannya penting tapi jarak antar nilainya nggak berarti. Misalnya level kepuasan 1 sampai 5. Rata-rata level 3 dan 4 jadi 3,5 itu nggak ada artinya, jadi ambil nilai nyata lebih tepat.

Apa semua database dukung fungsi ini?

Nggak semua. Ini gambaran dukungannya biar kamu nggak ketipu pas ganti database.

  • PostgreSQL: dukung keduanya lewat WITHIN GROUP.
  • SQL Server: dukung keduanya, dan bisa dipakai sebagai window function pakai OVER.
  • Oracle: dukung keduanya, plus punya fungsi MEDIAN sendiri.
  • BigQuery: dukung keduanya lewat sintaks yang mirip.
  • MySQL: sampai versi 8 belum punya. Harus diakalin pakai window function seperti ROW_NUMBER.

Selalu cek dokumentasi versi database kamu. Konsepnya sama, tapi detail sintaks kadang beda tipis antar sistem.

Contoh kasus: patokan harga toko_berkah

Di dataset toko_berkah ngulikdata ada 2.140 produk aktif. Owner mau nentuin batas harga buat kategori premium, patokannya percentile ke-90 harga per kategori. Pertanyaannya: pakai CONT atau DISC?

Aku coba dua-duanya di kategori minuman. PERCENTILE_CONT ngasih Rp28.500, angka yang nggak ada di daftar harga mana pun. PERCENTILE_DISC ngasih Rp29.000, harga produk yang beneran dijual.

SELECT
  PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY harga) AS p90_cont,
  PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY harga) AS p90_disc
FROM produk
WHERE kategori = 'minuman';

Buat patokan harga, aku pilih DISC. Selisih Rp500 kelihatan kecil, tapi kalau patokannya harga yang nggak pernah ada di rak, tim marketing bakal bingung produk mana yang masuk premium. DISC ngasih angka yang bisa langsung ditunjuk ke produk nyata. Ini kasus di mana milih fungsi yang salah bikin hasilnya benar secara matematika tapi nggak kepakai di lapangan.

Kesalahan umum

  • Ngira dua fungsi ini sama. Nama-nya mirip, hasilnya beda. Cek mana yang kamu butuh sebelum nulis query.
  • Pakai CONT buat harga aktual. Interpolasi ngasih angka yang nggak ada di data. Buat nilai yang harus nyata, pakai DISC.
  • Lupa WITHIN GROUP. Dua fungsi ini butuh ORDER BY di dalam WITHIN GROUP. Tanpa itu, error.
  • Asumsi jalan di MySQL. MySQL 8 belum dukung. Cek versi database dulu sebelum ngandelin sintaks ini.

FAQ

Apa beda utama PERCENTILE_CONT dan PERCENTILE_DISC?

PERCENTILE_CONT ngitung percentile pakai interpolasi antara dua nilai terdekat, jadi hasilnya bisa angka yang nggak ada di data asli. PERCENTILE_DISC ambil nilai nyata dari data yang posisinya paling pas sama percentile yang diminta. Contoh data 10 dan 20: median CONT ngasih 15, median DISC ngasih 10 atau 20. Pilih CONT buat statistik kontinu, DISC buat nilai yang harus beneran ada.

Kapan sebaiknya pakai PERCENTILE_CONT?

Pakai PERCENTILE_CONT buat kebanyakan analisis statistik, terutama median dan percentile nilai kontinu kayak pendapatan, durasi, atau nilai transaksi. Interpolasi bikin hasilnya lebih halus dan mewakili sebaran, mirip cara median dihitung di statistik umum. Ini pilihan default kalau kamu ragu, karena hasilnya konsisten sama yang diajarkan di kelas statistik dan yang dihitung Excel.

Kapan PERCENTILE_DISC lebih tepat?

Pakai PERCENTILE_DISC kalau kamu butuh nilai yang beneran ada di data, bukan hasil rata-rata dua angka. Contohnya nyari harga produk aktual di percentile ke-90 buat patokan harga, atau ID transaksi di titik tertentu. Interpolasi nggak masuk akal buat data kayak gini karena kamu nggak bisa punya harga setengah jadi. DISC juga lebih pas buat data ordinal yang urutannya penting tapi jarak antar nilai nggak berarti.

Apa semua database dukung fungsi ini?

Nggak semua. PostgreSQL, SQL Server, Oracle, dan BigQuery dukung keduanya lewat sintaks WITHIN GROUP. MySQL sampai versi 8 belum punya fungsi ini, jadi kamu harus akalin pakai window function seperti ROW_NUMBER. Selalu cek dokumentasi database yang kamu pakai sebelum ngandelin sintaks ini. Sintaks dan dukungan bisa beda tipis antar sistem walaupun konsepnya sama.

Bisa nggak PERCENTILE_CONT dipakai sebagai window function?

Bisa di beberapa database kayak PostgreSQL dan SQL Server, pakai OVER dengan PARTITION BY. Ini bikin kamu nempelin nilai percentile ke tiap baris tanpa nge-collapse data jadi satu baris hasil. Berguna kalau kamu mau bandingin tiap transaksi sama median grupnya di baris yang sama. Tapi dukungannya beda-beda per database, jadi cek dulu apakah versimu ngizinin sintaks OVER buat fungsi ini.

Penutup

Ringkasnya: PERCENTILE_CONT interpolasi dan cocok buat median statistik, PERCENTILE_DISC ambil nilai nyata dan cocok buat angka yang harus beneran ada. Dua-duanya butuh WITHIN GROUP dan ORDER BY.

Kalau ragu, pakai CONT buat statistik umum dan DISC buat nilai aktual. Selalu cek dukungan database sebelum nulis query.

Mau ngerti konsep di baliknya lebih dalam? Baca glossary median dan lanjut ke cara bikin histogram bucket di SQL. Referensi resmi ada di dokumentasi fungsi agregasi PostgreSQL. Mau lancar fungsi statistik SQL? Latihan langsung di NgulikSQL.

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

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)
Tutorial SQL
29 Desember 2026•9 menit baca

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)

NTH_VALUE ngambil nilai baris ke-N dalam window, tapi frame default-nya sering bikin hasil NULL. Ini sintaksnya, cara benerin frame, plus contoh transaksi toko.

BimaBima
Running Max dan Min dengan Window Function SQL
Tutorial SQL
26 Desember 2026•11 menit baca

Running Max dan Min dengan Window Function SQL

Lacak nilai tertinggi dan terendah berjalan di SQL pakai window function MAX dan MIN OVER. Ini sintaks, frame clause, dan contoh rekor omzet toko.

BimaBima
Analisa Afinitas Produk (Cross-Sell) dengan SQL
Tutorial SQL
23 Desember 2026•12 menit baca

Analisa Afinitas Produk (Cross-Sell) dengan SQL

Produk apa yang sering dibeli bareng? Analisa afinitas produk pakai SQL self JOIN jawab itu. Ini cara hitung support, confidence, dan lift buat strategi cross-sell.

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