0Pricing
SQL Interview Prep · Pelajaran

Distribusi Kumulatif dan Persentase dari Total

Hitung persentase berjalan dan porsi total dalam setiap partisi.

Distribusi Kumulatif dan Persentase dari Total adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Pertanyaan tentang Persentase dari Total

Pertanyaan umum dalam wawancara pelaporan: "Berapa persentase total pendapatan yang diwakili oleh setiap kategori?" dan versi kumulatifnya, "Berapa proporsi kumulatif dari total?"

Triknya adalah membagi nilai setiap baris dengan agregat jendela yang dihitung di seluruh partisi. Mengetahui bahwa Anda dapat menempatkan total keseluruhan dalam fungsi jendela tanpa penggabungan ke diri sendiri merupakan wawasan yang sedang diuji.

SUM Jendela Tanpa ORDER BY = Total Keseluruhan

Inilah langkah utamanya: SUM(amount) OVER () dengan OVER kosong dan tanpa ORDER BY menghasilkan total seluruh rangkaian hasil, yang diulang pada setiap baris.

Karena tidak ada ORDER BY, tidak ada bingkai kumulatif, sehingga bingkai bawaannya adalah seluruh partisi. Total pada setiap baris itu tepat merupakan penyebut yang Anda perlukan untuk persentase dari total.

SELECT
  category,
  amount,
  SUM(amount) OVER () AS grand_total
FROM category_sales;

Menghitung Persentase dari Total

Bagi nilai baris dengan total keseluruhan berjendela, lalu kalikan dengan 100. Konversikan ke desimal agar pembagian bilangan bulat tidak dibulatkan menjadi nol.

Kueri satu lintasan ini menggantikan pola lama berupa subkueri untuk total yang kemudian digabungkan kembali dengan baris perincian. Kueri ini lebih singkat, lebih cepat, dan mudah dibaca.

SELECT
  category,
  amount,
  ROUND(
    100.0 * amount / SUM(amount) OVER (),
    2
  ) AS pct_of_total
FROM category_sales;

Jebakan Pembagian Bilangan Bulat

Jebakan klasik dalam wawancara: pada banyak basis data, amount / total pada kolom bilangan bulat melakukan pembagian bilangan bulat, sehingga hasil yang kurang dari 1 menjadi 0.

Perbaiki dengan mengalikan terlebih dahulu dengan 100.0 (literal numerik), atau dengan mengonversikan salah satu operan: amount::numeric / total. Melupakan hal ini menghasilkan kolom berisi nol, yang langsung diketahui pewawancara.

SELECT
  category,
  amount * 1.0 / SUM(amount) OVER () AS share,
  CAST(amount AS DECIMAL) / SUM(amount) OVER () AS share_alt
FROM category_sales;

Persentase dari Total dalam Grup

Tambahkan PARTITION BY agar proporsi setiap baris dibandingkan dengan grupnya, bukan dengan seluruh tabel. Misalnya, persentase penjualan setiap produk dari wilayahnya sendiri.

Penyebut SUM(amount) OVER (PARTITION BY region) kini diatur ulang untuk setiap wilayah, sehingga persentase dalam setiap wilayah berjumlah 100.

SELECT
  region,
  product,
  amount,
  ROUND(
    100.0 * amount / SUM(amount) OVER (PARTITION BY region),
    2
  ) AS pct_of_region
FROM regional_sales;

Persentase Kumulatif dari Total

Gabungkan pembilang kumulatif dengan penyebut tetap untuk mendapatkan proporsi kumulatif dari total: jumlah total keseluruhan yang telah terkumpul pada setiap baris.

Pembilang menggunakan ORDER BY (kumulatif), sedangkan penyebut menggunakan OVER () kosong (total keseluruhan). Baris terakhir selalu mencapai 100%.

SELECT
  sale_date,
  amount,
  ROUND(
    100.0 * SUM(amount) OVER (ORDER BY sale_date)
          / SUM(amount) OVER (),
    2
  ) AS running_pct
FROM daily_sales;

CUME_DIST: Distribusi Kumulatif

SQL memiliki fungsi bawaan untuk distribusi kumulatif: CUME_DIST(). Fungsi ini mengembalikan proporsi baris dengan nilai ORDER BY yang kurang dari atau sama dengan baris saat ini, berupa angka dalam (0, 1].

Tidak seperti proporsi kumulatif manual dari suatu jumlah, CUME_DIST berkaitan dengan posisi baris, dengan menjawab "berapa proporsi baris yang berada pada atau di bawah nilai ini?" Fungsi ini berguna untuk pelaporan bergaya persentil.

SELECT
  score,
  CUME_DIST() OVER (ORDER BY score) AS cume_dist
FROM exam_results;

PERCENT_RANK dan Perbedaannya

Kerabat dekatnya adalah PERCENT_RANK(), yang didefinisikan sebagai (rank - 1) / (total_rows - 1), dengan rentang dari 0 hingga 1.

Perbedaan yang perlu diketahui dalam wawancara: CUME_DIST menyertakan baris saat ini dalam pembilangnya ("pada atau di bawah"), sedangkan PERCENT_RANK adalah peringkat relatif yang dimulai dari 0 untuk baris pertama. Keduanya menghasilkan nilai yang berbeda, dan tertukar merupakan kekeliruan yang umum.

SELECT
  score,
  CUME_DIST()    OVER (ORDER BY score) AS cd,
  PERCENT_RANK() OVER (ORDER BY score) AS pr
FROM exam_results;

Pareto / Analisis 80-20

Persentase kumulatif dari total menjadi dasar analisis Pareto: "pelanggan teratas mana yang menyumbang 80% pendapatan?" Urutkan berdasarkan jumlah secara menurun, hitung proporsi kumulatif, lalu lakukan penyaringan saat proporsi kumulatif pertama kali melewati 80%.

Karena hasil fungsi jendela tidak dapat ditempatkan di WHERE, bungkus perhitungannya dalam CTE dan lakukan penyaringan di kueri luar, sesuai aturan yang sama seperti semua fungsi jendela.

WITH ranked AS (
  SELECT
    customer_id,
    revenue,
    SUM(revenue) OVER (ORDER BY revenue DESC)
      / SUM(revenue) OVER () AS running_share
  FROM customer_revenue
)
SELECT *
FROM ranked
WHERE running_share <= 0.80;

Pembulatan dan Rekonsiliasi

Perlu diperhatikan: membulatkan setiap persentase menjadi 2 desimal dapat membuat jumlah kolom menjadi 99.99 atau 100.01, bukan tepat 100. Dalam wawancara, pewawancara mungkin menanyakan bagaimana Anda menjamin bahwa bagian-bagian tersebut berjumlah sama dengan keseluruhan.

Jawaban umum: lakukan pembulatan hanya untuk tampilan, pertahankan presisi penuh untuk perhitungan, atau terapkan penyesuaian sisa terbesar pada satu baris. Menyebutkan masalahnya lebih penting daripada solusinya.

Poin-Poin Ringkasan Wawancara

Poin-poin utama yang perlu Anda sampaikan:

  • SUM(x) OVER () tanpa ORDER BY = total keseluruhan pada setiap baris.
  • Kalikan dengan 100.0 untuk menghindari pembagian bilangan bulat.
  • PARTITION BY untuk proporsi per grup.
  • Pembilang kumulatif dengan penyebut total keseluruhan = proporsi berjalan.
  • CUME_DIST dan PERCENT_RANK untuk distribusi; pahami perbedaannya.
  • Bungkus dalam CTE untuk penyaringan Pareto atau ambang batas.

Uji Cepat

Bagaimana cara mendapatkan total keseluruhan dari seluruh kumpulan hasil pada setiap baris?

Ringkasan: Distribusi dan Persentase dari Total

Persentase dari total membagi nilai suatu baris dengan SUM(x) OVER (), yaitu total keseluruhan yang dikembalikan pada setiap baris; selalu kalikan dengan 100.0 untuk menghindari pembagian bilangan bulat dan tambahkan PARTITION BY untuk mendapatkan proporsi per grup. Pembilang kumulatif dengan penyebut total keseluruhan menghasilkan proporsi berjalan yang berakhir pada 100%, sebagai dasar analisis Pareto.

Untuk distribusi berbasis posisi, gunakan CUME_DIST dan PERCENT_RANK, serta ingat catatan tentang rekonsiliasi pembulatan. Dengan demikian, pembahasan tentang total berjalan dan rata-rata bergerak selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Distribusi Kumulatif dan Persentase dari Total” gratis?

Ya — teks lengkap “Distribusi Kumulatif dan Persentase dari Total” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Distribusi Kumulatif dan Persentase dari Total”?

Hitung persentase berjalan dan porsi total dalam setiap partisi. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Distribusi Kumulatif dan Persentase dari Total” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Jumlah Kumulatif dengan Frame Jendela
  2. Pembingkaian ROWS vs RANGE
  3. Rata-Rata Bergerak pada Jendela Geser
  4. Distribusi Kumulatif dan Persentase dari Total
← Kembali ke SQL Interview Prep