0Pricing
Coding Interview Prep · Pelajaran

Jumlah Kumulatif dengan Frame Jendela

Bangun total berjalan menggunakan SUM OVER dengan frame yang diurutkan.

Jumlah Kumulatif dengan Frame Jendela adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 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 Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Pertanyaan tentang Total Berjalan

Hampir setiap wawancara analis mencakup pertanyaan seperti: "Tunjukkan pendapatan kumulatif dari waktu ke waktu." Total berjalan adalah jumlah yang bertambah baris demi baris, mengakumulasikan semua nilai dari awal hingga baris saat ini.

Sebelum fungsi jendela tersedia, kandidat menyelesaikan ini dengan penggabungan mandiri yang lambat atau subkueri berkorelasi. Jawaban modern yang diharapkan adalah SUM(...) OVER (ORDER BY ...). Mengetahui versi yang menggunakan bingkai jendela menunjukkan bahwa Anda memahami SQL yang ditulis setelah sekitar tahun 2012.

Anatomi Penjumlahan Jendela Terurut

Total berjalan hanyalah agregat yang diubah menjadi fungsi jendela. Anda tetap menggunakan SUM(amount), tetapi menambahkan klausa OVER dengan ORDER BY.

ORDER BY di dalam OVER-lah yang membuat hasilnya kumulatif: bagian ini memberi tahu SQL untuk mengakumulasikan baris dalam urutan tersebut. Tanpa ORDER BY, SUM akan menjumlahkan seluruh partisi pada setiap baris, bukan bertambah secara bertahap.

SELECT
  sale_date,
  amount,
  SUM(amount) OVER (ORDER BY sale_date) AS running_total
FROM sales
ORDER BY sale_date;

Mengapa ORDER BY Menyiratkan Bingkai

Inilah detail yang senang diuji oleh pewawancara: saat Anda menambahkan ORDER BY ke agregat jendela, SQL menerapkan bingkai bawaan berupa RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

Bingkai bawaan tersebut tepat menghasilkan total berjalan: setiap baris mulai dari awal partisi hingga dan termasuk baris saat ini. Jika Anda memahami bawaan ini, Anda memahami mengapa jumlah kumulatif "langsung berfungsi".

Menuliskan Bingkai Secara Eksplisit

Anda dapat menuliskan bingkai secara manual. Kedua kueri ini mengembalikan hasil yang sama, tetapi versi eksplisit menunjukkan kepada pewawancara bahwa Anda memahami apa yang terjadi di balik layar.

Menuliskan ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW adalah bentuk eksplisit yang paling aman untuk total berjalan karena menghitung baris fisik, sehingga menghindari kejutan pengelompokan nilai dari RANGE (yang dibahas dalam pelajaran berikutnya).

SELECT
  sale_date,
  amount,
  SUM(amount) OVER (
    ORDER BY sale_date
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS running_total
FROM sales;

Contoh Terapan: Penjualan Harian

Bayangkan penjualan selama empat hari: Sen 100, Sel 50, Rab 200, Kam 75. Total berjalan terakumulasi dari kiri ke kanan.

  • Sen: 100
  • Sel: 100 + 50 = 150
  • Rab: 150 + 200 = 350
  • Kam: 350 + 75 = 425

Baris terakhir selalu sama dengan total keseluruhan. Ini adalah pemeriksaan kewajaran singkat yang dapat Anda sebutkan dalam wawancara: nilai total berjalan terakhir harus sama dengan SUM(amount) atas seluruh kumpulan data.

Mengatur Ulang per Grup dengan PARTITION BY

Pertanyaan nyata biasanya meminta total berjalan per pelanggan atau per wilayah, bukan satu total global. Tambahkan PARTITION BY, dan akumulasi dimulai ulang di awal setiap partisi.

Model mentalnya: PARTITION BY membagi baris ke dalam kelompok-kelompok independen, lalu ORDER BY beserta bingkai dijalankan secara terpisah di dalam setiap kelompok.

SELECT
  customer_id,
  sale_date,
  amount,
  SUM(amount) OVER (
    PARTITION BY customer_id
    ORDER BY sale_date
  ) AS customer_running_total
FROM sales;

Jebakan Pemecah Seri

Jika dua baris memiliki nilai ORDER BY yang sama (dua penjualan pada tanggal yang sama), bingkai bawaan RANGE memperlakukan keduanya sebagai baris setara dan memberi total berjalan yang sama, termasuk kedua jumlah.

Jika Anda memerlukan kenaikan yang benar-benar berlangsung baris demi baris, bahkan saat nilainya sama, gunakan bingkai ROWS dan tambahkan pemecah seri unik ke ORDER BY, misalnya sale_date, id. Pewawancara sengaja memasukkan tanggal duplikat untuk melihat apakah Anda menyadarinya.

SELECT
  sale_date,
  amount,
  SUM(amount) OVER (
    ORDER BY sale_date, id
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS running_total
FROM sales;

Total Berjalan dari Hitungan

Logika kumulatif tidak terbatas pada SUM. Agregat apa pun dapat digunakan sebagai fungsi jendela, sehingga Anda dapat membuat hitungan, rata-rata, atau nilai maksimum berjalan.

Hitungan pesanan berjalan adalah metrik dasbor yang umum: berapa banyak pesanan yang telah kita terima sejauh ini pada setiap hari?

SELECT
  order_date,
  COUNT(*) OVER (
    ORDER BY order_date
  ) AS orders_to_date
FROM orders;

Cara Lama: Subkueri Berkorelasi

Pewawancara terkadang meminta Anda menyelesaikan total berjalan tanpa fungsi jendela untuk menguji kedalaman pemahaman. Solusi klasik sebelum fungsi jendela adalah subkueri berkorelasi yang menjumlahkan ulang setiap baris sebelumnya.

Solusi ini berfungsi, tetapi kompleksitasnya O(n kuadrat): untuk setiap baris, tabel dipindai ulang. Sebutkan hal ini untuk menunjukkan bahwa Anda memahami mengapa fungsi jendela menggantikannya.

SELECT
  s.sale_date,
  s.amount,
  (SELECT SUM(s2.amount)
   FROM sales s2
   WHERE s2.sale_date <= s.sale_date) AS running_total
FROM sales s
ORDER BY s.sale_date;

Pemfilteran dan Hasil Jendela

Pertanyaan lanjutan yang sering muncul: "Tampilkan hanya hari-hari saat total berjalan melewati 1000." Anda tidak dapat menempatkan fungsi jendela di dalam WHERE karena bingkai dihitung setelah WHERE dijalankan.

Solusinya adalah menghitung total berjalan dalam CTE atau subkueri, lalu memfilter kueri luar. Ini adalah aturan pembungkus yang sama dan berlaku untuk setiap fungsi jendela.

WITH t AS (
  SELECT
    sale_date,
    SUM(amount) OVER (ORDER BY sale_date) AS running_total
  FROM sales
)
SELECT *
FROM t
WHERE running_total >= 1000;

Poin Pembahasan Wawancara

Saat menyampaikan jawaban tentang total berjalan, jelaskan poin-poin berikut untuk memperoleh nilai penuh:

  • SUM OVER (ORDER BY ...) adalah bentuk kumulatif.
  • Menambahkan ORDER BY membuat bingkai bawaan dari UNBOUNDED PRECEDING hingga CURRENT ROW.
  • Gunakan PARTITION BY untuk mengatur ulang per grup.
  • Tambahkan pemecah seri unik dan bingkai ROWS untuk menghindari jebakan nilai duplikat.
  • Bungkus dalam CTE untuk memfilter hasilnya.

Pemeriksaan Singkat

Uji pemahaman Anda tentang bingkai bawaan.

Ringkasan: Jumlah Kumulatif

Total berjalan adalah agregat jendela terurut. SUM(amount) OVER (ORDER BY sale_date) mengakumulasikan baris dari awal partisi hingga baris saat ini, berkat bingkai implisit dari UNBOUNDED PRECEDING hingga CURRENT ROW.

Atur ulang per grup dengan PARTITION BY, tambahkan pemecah seri serta bingkai ROWS untuk menangani nilai pengurutan duplikat, dan bungkus dalam CTE kapan pun Anda perlu memfilter berdasarkan nilai kumulatif. Berikutnya, kita menguraikan perbedaan ROWS dan RANGE yang disinggung dalam pelajaran ini.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Jumlah Kumulatif dengan Frame Jendela” gratis?

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

Apa yang akan aku pelajari di “Jumlah Kumulatif dengan Frame Jendela”?

Bangun total berjalan menggunakan SUM OVER dengan frame yang diurutkan. Kamu berlatih Coding 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 Coding Interview Prep?

Tidak diperlukan pengalaman sebelumnya. Coding 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 1 dari 4.

Berapa lama pelajaran “Jumlah Kumulatif dengan Frame Jendela” 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 Coding Interview Prep ini?

Ya. Setiap pelajaran Coding 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 Coding Interview Prep