Persediaan Temu Duga Pengaturcaraan · Pelajaran

Taburan Kumulatif dan Peratusan Jumlah

Kira peratusan berjalan dan bahagian daripada jumlah dalam partition

Pelajaran 4 daripada 413 langkah

Taburan Kumulatif dan Peratusan Jumlah ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.

Soalan Peratusan Daripada Jumlah

Soalan temu duga pelaporan yang lazim: "Berapakah peratusan jumlah hasil yang diwakili oleh setiap kategori?" dan variasi terkumpulnya "Berapakah bahagian jumlah yang sedang berjalan?"

Helahnya ialah membahagikan nilai setiap baris dengan agregat tetingkap yang dikira pada seluruh partisi. Mengetahui bahawa Anda boleh meletakkan jumlah keseluruhan dalam fungsi tetingkap tanpa memerlukan cantuman kendiri ialah pemahaman yang sedang diuji.

SUM Tetingkap Tanpa ORDER BY = Jumlah Keseluruhan

Inilah langkah utama: SUM(amount) OVER () dengan OVER kosong dan tanpa ORDER BY mengembalikan jumlah seluruh set hasil, diulang pada setiap baris.

Oleh sebab tiada ORDER BY, tiada bingkai berjalan, jadi bingkai lalai ialah keseluruhan partisi. Jumlah pada setiap baris itu tepatnya penyebut yang diperlukan untuk peratusan daripada jumlah.

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

Mengira Peratusan Daripada Jumlah

Bahagikan nilai baris dengan jumlah keseluruhan bertetingkap dan darabkan dengan 100. Tukarkan kepada perpuluhan supaya pembahagian nombor bulat tidak dipotong menjadi sifar.

Pertanyaan satu laluan ini menggantikan corak lama yang menggunakan subpertanyaan untuk jumlah, kemudian mencantumkannya semula dengan baris terperinci. Pertanyaan ini lebih pendek, lebih pantas dan mudah dibaca.

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

Perangkap Pembahagian Nombor Bulat

Perangkap temu duga klasik: dalam banyak pangkalan data, amount / total pada lajur nombor bulat melakukan pembahagian nombor bulat, jadi hasil yang kurang daripada 1 menjadi 0.

Baikinya dengan mendarabkan dengan 100.0 (literal berangka) terlebih dahulu, atau dengan menukar salah satu operan: amount::numeric / total. Jika terlupa perkara ini, lajur yang semuanya sifar akan dikembalikan dan penemu duga akan menyedarinya serta-merta.

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

Peratusan Daripada Jumlah Dalam Kumpulan

Tambahkan PARTITION BY supaya bahagian setiap baris dibandingkan dengan kumpulannya, bukan dengan seluruh jadual. Contohnya, peratusan jualan setiap produk berbanding jualan di rantau sendiri.

Penyebut SUM(amount) OVER (PARTITION BY region) kini ditetapkan semula bagi setiap rantau, jadi peratusan dalam setiap rantau berjumlah 100.

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

Peratusan Berjalan Daripada Jumlah

Gabungkan pengangka terkumpul dengan penyebut tetap untuk mendapatkan bahagian jumlah yang sedang berjalan: jumlah keseluruhan yang telah terkumpul sehingga setiap baris.

Pengangka menggunakan ORDER BY (terkumpul), manakala penyebut menggunakan OVER () kosong (jumlah keseluruhan). Baris terakhir sentiasa 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: Taburan Terkumpul

Bahasa ini mempunyai fungsi terbina dalam untuk taburan terkumpul: CUME_DIST(). Fungsi ini mengembalikan pecahan baris yang mempunyai nilai ORDER BY kurang daripada atau sama dengan baris semasa, iaitu nombor dalam julat (0, 1].

Berbeza daripada bahagian amaun berjalan yang dikira secara manual, CUME_DIST berkaitan dengan kedudukan baris dan menjawab soalan "apakah kadar baris yang berada pada atau di bawah nilai ini?" Fungsi ini berguna untuk pelaporan gaya persentil.

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

PERCENT_RANK dan Perbezaannya

Saudara terdekatnya ialah PERCENT_RANK(), yang ditakrifkan sebagai (rank - 1) / (total_rows - 1) dan berada dalam julat 0 hingga 1.

Perbezaan penting dalam temu duga: CUME_DIST memasukkan baris semasa dalam pengangkanya ("pada atau di bawah"), manakala PERCENT_RANK ialah kedudukan relatif yang bermula pada 0 untuk baris pertama. Kedua-duanya menghasilkan nilai yang berbeza dan kekeliruan antara kedua-duanya ialah kesilapan yang biasa.

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

Analisis Pareto / 80-20

Peratusan berjalan daripada jumlah membolehkan analisis Pareto: "pelanggan teratas yang manakah membentuk 80% hasil?" Isih mengikut amaun secara menurun, kira bahagian berjalan, kemudian tapis apabila bahagian terkumpul mula melepasi 80%.

Oleh sebab hasil fungsi tetingkap tidak boleh diletakkan dalam WHERE, bungkus pengiraan itu dalam CTE dan lakukan penapisan dalam pertanyaan luar, mengikut peraturan yang sama seperti setiap fungsi tetingkap.

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;

Pembundaran dan Penyelarasan

Berhati-hati: membundarkan setiap peratusan kepada 2 tempat perpuluhan boleh menyebabkan jumlah lajur menjadi 99.99 atau 100.01 dan bukannya tepat 100. Penemu duga mungkin bertanya cara anda menjamin jumlah bahagian sama dengan keseluruhan.

Jawapan lazim: bundarkan hanya untuk paparan, kekalkan ketepatan penuh untuk pengiraan matematik, atau lakukan pelarasan baki terbesar pada satu baris. Menamakan isu itu lebih penting daripada pembetulannya.

Poin Ringkasan Temu Duga

Isi penting yang perlu disebut secara lisan:

  • SUM(x) OVER () tanpa ORDER BY = jumlah besar pada setiap baris.
  • Darab dengan 100.0 untuk mengelakkan pembahagian nombor bulat.
  • PARTITION BY untuk bahagian setiap kumpulan.
  • Pengangka terkumpul dengan penyebut jumlah besar = bahagian terkumpul.
  • CUME_DIST dan PERCENT_RANK untuk taburan; ketahui perbezaan antara kedua-duanya.
  • Balut dalam CTE untuk penapisan Pareto/ambang.

Semakan Pantas

Bagaimanakah anda mendapatkan jumlah besar bagi keseluruhan set hasil pada setiap baris?

Ulang Kaji: Taburan dan Peratusan Jumlah

Peratusan jumlah membahagikan nilai baris dengan SUM(x) OVER (), iaitu jumlah besar yang dikembalikan pada setiap baris; sentiasa darabkan dengan 100.0 untuk mengelakkan pembahagian nombor bulat dan tambahkan PARTITION BY untuk bahagian setiap kumpulan. Pengangka terkumpul dengan penyebut jumlah besar menghasilkan bahagian terkumpul yang berakhir pada 100%, iaitu asas analisis Pareto.

Untuk taburan berasaskan kedudukan, gunakan CUME_DIST dan PERCENT_RANK, serta ingat peringatan tentang penyelarasan pembundaran. Ini melengkapkan topik jumlah berjalan dan purata bergerak.

Percuma untuk bermula

Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
90
Pelajaran
360

Soalan Lazim

Adakah pelajaran “Taburan Kumulatif dan Peratusan Jumlah” percuma?

Ya — teks penuh “Taburan Kumulatif dan Peratusan Jumlah” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Taburan Kumulatif dan Peratusan Jumlah”?

Kira peratusan berjalan dan bahagian daripada jumlah dalam partition Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Taburan Kumulatif dan Peratusan Jumlah” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?

Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Jumlah Terkumpul Dengan Bingkai Tetingkap
  2. Pembingkaian ROWS berbanding RANGE
  3. Purata Bergerak Merentas Tetingkap Gelongsor
  4. Taburan Kumulatif dan Peratusan Jumlah
← Kembali ke Persediaan Temu Duga Pengaturcaraan