Menghitung Median dan Percentile di SQL (2026)
Blog/Tutorial SQL/Menghitung Median dan Percentile di SQL (2026)

Menghitung Median dan Percentile di SQL (2026)

BimaBima
·4 Agustus 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Buat hitung median di SQL, pakai PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kolom). Median itu percentile ke-50. Fungsi ini juga bisa hitung percentile lain kayak P90 atau P25. PostgreSQL, SQL Server, dan BigQuery dukung, tapi MySQL butuh cara manual pakai window function.

Buat hitung median di SQL, pakai PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kolom). Median itu sebenernya percentile ke-50, jadi satu fungsi ini ngecover keduanya.

Kenapa ga pakai AVG aja? Karena rata-rata gampang ketarik nilai ekstrem. Satu transaksi Rp10 juta bisa bikin rata-rata naik, padahal mayoritas transaksi kecil. Median lebih tahan sama pencilan.

Di artikel ini kamu bakal belajar cara hitung median dan percentile, bedain CONT sama DISC, hitung per grup, sampai trik buat MySQL yang belum punya fungsinya.

Apa itu median dan percentile?

Median adalah nilai tengah dari data yang udah diurutkan, jadi setengah data ada di bawahnya dan setengah di atasnya. Percentile itu perluasannya: percentile ke-90 berarti nilai yang 90% data ada di bawahnya. Median sama dengan percentile ke-50. Keduanya ngasih gambaran sebaran yang lebih jujur dari rata-rata pas datanya miring.

Konsep sebaran ini nyambung sama persen dari total yang juga ngukur posisi relatif tiap nilai.

Gimana cara hitung median di SQL?

Fungsi standarnya PERCENTILE_CONT. Sintaksnya agak beda dari fungsi biasa karena pakai WITHIN GROUP.

SELECT
  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY nilai) AS median
FROM penjualan;

Pecahannya:

  • 0.5: percentile yang dicari. 0.5 berarti median (50%).
  • WITHIN GROUP (ORDER BY nilai): data harus diurutkan dulu, karena percentile butuh urutan.

Mau percentile lain? Ganti angkanya. 0.9 buat P90, 0.25 buat kuartil bawah.

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 penjualan;

Apa beda PERCENTILE_CONT dan PERCENTILE_DISC?

FungsiCara kerjaHasil
PERCENTILE_CONTInterpolasi antara dua nilaiBisa angka yang ga ada di data
PERCENTILE_DISCAmbil nilai nyata dari dataSelalu nilai yang beneran ada

Contoh: data [10, 20]. Median CONT ngasih 15 (rata-rata dua nilai tengah). Median DISC ngasih 10 atau 20 (nilai nyata). Buat median statistik biasa, pakai CONT. Buat kasus yang butuh nilai asli, misalnya kategori, pakai DISC.

Cara hitung median per grup

Tambah GROUP BY buat dapetin median tiap kategori.

SELECT
  kategori,
  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY nilai) AS median
FROM penjualan
GROUP BY kategori;

Ini ngasih median nilai transaksi buat tiap kategori. Berguna banget buat bandingin sebaran antar grup, bukan cuma total.

Gimana hitung median di MySQL?

MySQL sampai versi 8 belum punya PERCENTILE_CONT. Kamu bisa akalin pakai window function. Idenya: urutin data, kasih nomor baris, lalu ambil yang di tengah.

SELECT AVG(nilai) AS median
FROM (
  SELECT
    nilai,
    ROW_NUMBER() OVER (ORDER BY nilai) AS rn,
    COUNT(*) OVER () AS total
  FROM penjualan
) t
WHERE rn IN (FLOOR((total + 1) / 2), CEIL((total + 1) / 2));

Query ini ngambil satu atau dua baris tengah lalu dirata-rata. Kalau jumlah data ganjil, baris tengahnya satu. Kalau genap, dua baris tengah dirata-rata. Hasilnya setara PERCENTILE_CONT(0.5).

Contoh kasus: toko_berkah

Di dataset toko_berkah ngulikdata ada 14.880 transaksi setahun. Owner lihat rata-rata nilai transaksi Rp45.200 dan ngira kebanyakan pelanggan belanja segitu. Tapi angka itu nyesatin.

SELECT
  ROUND(AVG(nilai)) AS rata_rata,
  PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY nilai) AS median,
  PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY nilai) AS p90
FROM transaksi;

Median-nya ternyata cuma Rp31.500, jauh di bawah rata-rata. Artinya separuh transaksi di bawah Rp31.500, dan angka rata-rata ketarik naik sama sedikit transaksi besar di P90 yang tembus Rp120.000. Median ngasih gambaran pelanggan tipikal yang lebih jujur. Keputusan promo jadi beda kalau kamu lihat median, bukan rata-rata.

Kesalahan umum

  • Nyari fungsi MEDIAN langsung. Banyak database ga punya MEDIAN(). Pakai PERCENTILE_CONT(0.5).
  • Lupa WITHIN GROUP. PERCENTILE_CONT butuh ORDER BY di dalam WITHIN GROUP. Tanpa itu, error.
  • Ngira AVG sama dengan median. Dua-duanya beda. Rata-rata ketarik pencilan, median nggak.
  • Pakai di MySQL tanpa cek versi. MySQL belum dukung fungsinya. Cek versi database sebelum nulis query.

FAQ

Kenapa SQL ga punya fungsi MEDIAN langsung?

Standar SQL nyediain median lewat PERCENTILE_CONT dan PERCENTILE_DISC, bukan fungsi MEDIAN terpisah. Alasannya, median cuma kasus khusus dari percentile, yaitu percentile ke-50. Jadi satu fungsi udah cukup buat semua. Beberapa database kayak Oracle punya MEDIAN() sendiri, tapi mayoritas ngarahin kamu ke PERCENTILE_CONT.

Kapan pakai median dan kapan rata-rata?

Pakai median kalau datanya miring atau ada pencilan, misalnya nilai transaksi, gaji, atau harga rumah, di mana beberapa angka besar bisa narik rata-rata. Pakai rata-rata kalau datanya nyebar merata tanpa ekstrem. Aturan gampangnya: kalau kamu ragu datanya simetris atau nggak, median lebih aman buat gambarin nilai tipikal.

Apa beda percentile dan kuartil?

Kuartil itu percentile di titik 25, 50, dan 75. Jadi kuartil pertama sama dengan percentile ke-25, kuartil kedua sama dengan median, dan kuartil ketiga percentile ke-75. Kuartil cuma cara ngomong percentile yang lebih umum buat bagi data jadi empat bagian sama besar. Konsep dan fungsinya sama.

Bisa ga PERCENTILE_CONT dipakai sebagai window function?

Bisa di beberapa database kayak PostgreSQL dan SQL Server, pakai OVER (PARTITION BY ...). Ini bikin kamu nempelin nilai percentile ke tiap baris tanpa nge-collapse data, mirip window function lain. Tapi dukungannya beda-beda per database, jadi cek dokumentasi versimu dulu sebelum ngandelin sintaks ini.

Penutup

Median di SQL cukup pakai PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY kolom). Fungsi yang sama ngasih percentile berapa pun. Ingat, median lebih jujur dari rata-rata pas datanya miring.

Buat MySQL, akalin pakai window function ROW_NUMBER. Selalu cek versi database sebelum nulis.

Mau lancar window function dan agregasi SQL? Latihan langsung di NgulikSQL dan baca persen dari total dengan window function. Referensi resmi ada di dokumentasi fungsi agregasi PostgreSQL.

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