Rata-Rata Bergerak pada Jendela Geser
Hitung rata-rata bergulir untuk N periode dengan BETWEEN PRECEDING dan CURRENT ROW.
Rata-Rata Bergerak pada Jendela Geser adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 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 Rata-Rata Bergerak
Analis sering sekali ditanya: "Hitung rata-rata bergerak 7 hari dari pendapatan." Rata-rata bergerak (atau bergulir) menghaluskan data harian yang berisik dengan merata-ratakan setiap titik bersama titik-titik terdekatnya.
Jawaban yang baik untuk wawancara adalah AVG berjendela dengan bingkai geser yang dinyatakan secara eksplisit. Keterampilan utamanya adalah memilih batas bingkai agar jendela bergeser dengan benar mengikuti urutan.
Pola Utama
Rata-rata bergerak adalah AVG(value) OVER (ORDER BY ... ROWS BETWEEN n PRECEDING AND CURRENT ROW). Bingkainya bergeser: pada setiap baris, bingkai mencakup baris saat ini dan n baris sebelumnya.
Untuk jendela 7 hari pada baris harian, Anda mundur 6 baris ditambah baris saat ini, sehingga totalnya 7 baris. Kesalahan selisih satu di sini merupakan kesalahan paling umum yang ditemukan pewawancara.
SELECT
sale_date,
amount,
AVG(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS moving_avg_7d
FROM daily_sales;Menghitung Ukuran Jendela dengan Tepat
Ukuran jendela sama dengan preceding + 1 (+1 adalah baris saat ini). Jadi:
- Jendela 3 baris:
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW - Jendela 7 baris:
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW - Jendela 30 baris:
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
Ucapkan perhitungan ini saat wawancara agar panel melihat bahwa Anda bekerja dengan teliti, bukan menebak.
Jendela Terpusat vs Jendela Mundur
Contoh di atas adalah rata-rata mundur: rata-rata ini hanya melihat ke belakang, sehingga bersifat kausal dan aman untuk dasbor prakiraan.
Rata-rata terpusat melihat ke dua arah, misalnya ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING untuk jendela terpusat 7 baris. Jendela terpusat menghaluskan data dengan lebih simetris, tetapi tidak dapat dihitung secara waktu nyata untuk baris-baris terbaru. Sebutkan jenis yang diperlukan oleh kasus penggunaan tersebut.
SELECT
sale_date,
AVG(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centered_avg_7
FROM daily_sales;Efek Tepi Jendela
Pada awal data, jendela penuh belum tersedia. Untuk baris pertama dari rata-rata bergerak mundur 7 hari, hanya 1 baris yang tersedia, sehingga AVG hanya merata-ratakan satu nilai tersebut.
Artinya, baris-baris awal menampilkan rata-rata "pemanasan awal" yang mencakup lebih sedikit baris. Pewawancara mungkin menanyakan cara menanganinya. Ada dua pilihan: menerima jendela parsial atau menyembunyikan baris awal dengan mensyaratkan jumlah penuh.
Menyembunyikan Jendela Parsial
Jika kebutuhan bisnisnya adalah menampilkan NULL sampai jendela penuh tersedia, gunakan COUNT(*) pada bingkai yang sama dan jadikan jendela pendek kosong dengan ekspresi CASE.
Ini merupakan sentuhan yang menunjukkan bahwa Anda memikirkan ketepatan pada batas-batas data, suatu detail yang sering dilewatkan banyak kandidat.
SELECT
sale_date,
CASE WHEN COUNT(*) OVER w = 7
THEN AVG(amount) OVER w
END AS moving_avg_7d
FROM daily_sales
WINDOW w AS (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);Menggunakan Kembali Bingkai dengan WINDOW
Kueri sebelumnya menggunakan klausa WINDOW bernama. Ketika bingkai yang sama muncul beberapa kali, mendefinisikannya sekali sebagai WINDOW w AS (...) dan merujuknya dengan OVER w membuat kueri tetap mengikuti prinsip DRY dan mudah dibaca.
Postgres, MySQL 8, dan SQL Server mendukung jendela bernama. Menggunakan jendela bernama dalam wawancara menunjukkan kefasihan yang melampaui sekadar menyalin dan menempel fungsi jendela.
SELECT
sale_date,
AVG(amount) OVER w AS avg_7d,
SUM(amount) OVER w AS sum_7d
FROM daily_sales
WINDOW w AS (
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
);Jebakan Hari Kalender vs Baris
Jebakan yang halus: jika tabel memiliki hari yang hilang, ROWS 6 PRECEDING mencakup 7 baris yang tercatat terakhir, yang mungkin mencakup lebih dari 7 hari kalender.
Untuk rata-rata 7 hari berbasis kalender yang sebenarnya dan memperhitungkan celah, gunakan RANGE dengan pergeseran interval, atau gabungkan terlebih dahulu dengan rangkaian tanggal lengkap agar setiap hari memiliki satu baris. Menyebutkan perbedaan ini tepat menunjukkan pemahaman ROWS dibandingkan RANGE dari pelajaran sebelumnya.
SELECT
sale_date,
AVG(amount) OVER (
ORDER BY sale_date
RANGE BETWEEN INTERVAL '6 days' PRECEDING AND CURRENT ROW
) AS calendar_avg_7d
FROM daily_sales;Rata-Rata Bergerak per Grup
Sama seperti total kumulatif, rata-rata bergerak biasanya perlu diatur ulang untuk setiap entitas. Tambahkan PARTITION BY agar setiap produk atau toko mendapatkan jendela bergeraknya sendiri yang tidak merembet ke grup lain.
Bingkai dan pengurutan beroperasi secara independen di dalam setiap partisi, sehingga baris awal setiap grup memulai pemanasan awalnya sendiri dengan benar.
SELECT
product_id,
sale_date,
AVG(amount) OVER (
PARTITION BY product_id
ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS product_ma_7d
FROM daily_sales;Penghalusan dalam Praktik
Mengapa perlu dilakukan? Pendapatan harian naik turun tajam; rata-rata bergerak menyingkapkan trennya. Jawaban umum seorang analis adalah memasangkan nilai mentah dengan garis yang telah dihaluskan agar dasbor menampilkan sinyal dan derau sekaligus.
Anda juga dapat membandingkan rata-rata bergerak jangka pendek dan panjang (misalnya 7 hari dibandingkan dengan 30 hari) untuk mendeteksi momentum, yang merupakan padanan SQL dari persilangan rata-rata bergerak.
SELECT
sale_date,
amount,
AVG(amount) OVER (ORDER BY sale_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma_7,
AVG(amount) OVER (ORDER BY sale_date
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS ma_30
FROM daily_sales;Daftar Periksa Wawancara
Untuk menjawab pertanyaan tentang rata-rata bergerak dengan sempurna, bahas hal-hal berikut:
AVG OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW).- Ukuran jendela = preceding + 1.
- Pilihan antara jendela mundur dan terpusat.
- Pemanasan awal jendela parsial dan cara menyembunyikannya.
ROWSdibandingkan denganRANGEketika ada hari yang hilang.PARTITION BYuntuk mengatur ulang perhitungan per entitas.
Pemeriksaan Singkat
Pilih bingkai untuk rata-rata bergerak mundur 7 hari pada baris harian.
Ringkasan: Rata-Rata Bergerak
Rata-rata bergerak adalah AVG(value) OVER (ORDER BY ... ROWS BETWEEN n-1 PRECEDING AND CURRENT ROW), dengan ukuran jendela berupa jumlah baris sebelumnya ditambah satu. Pilih jendela mundur atau terpusat sesuai kasus penggunaan, tangani baris pemanasan awal dengan pengaman COUNT, dan beralih ke interval RANGE ketika celah kalender penting.
Atur ulang per entitas dengan PARTITION BY dan gunakan kembali bingkai dengan WINDOW bernama. Selanjutnya, kita mengubah jumlah kumulatif menjadi persentase dengan proporsi kumulatif dari total.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Rata-Rata Bergerak pada Jendela Geser” gratis?
Ya — teks lengkap “Rata-Rata Bergerak pada Jendela Geser” 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 “Rata-Rata Bergerak pada Jendela Geser”?
Hitung rata-rata bergulir untuk N periode dengan BETWEEN PRECEDING dan CURRENT ROW. 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 3 dari 4.
Berapa lama pelajaran “Rata-Rata Bergerak pada Jendela Geser” 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
- Jumlah Kumulatif dengan Frame Jendela
- Pembingkaian ROWS vs RANGE
- Rata-Rata Bergerak pada Jendela Geser
- Distribusi Kumulatif dan Persentase dari Total