Menu
CoddyTech

Kriteria ROWS & RANGE

Termasuk bagian Dasar-Dasar dalam perjalanan SQL di Coddy. Pelajaran 69 dari 72.

Saat ini, kita belum bisa menentukan dengan fleksibel berapa banyak baris sebelum atau sesudah yang perlu diperhitungkan. Sekarang hal itu bisa dilakukan dengan kriteria ROWS & RANGE. Untuk menggunakannya, kita menulis:

OVER (ROWS BETWEEN --START-- AND --END--)

OVER (RANGE BETWEEN --START-- AND --END--)

Dan kita dapat menentukan opsi berikut:

  • CURRENT ROW - baris saat ini
  • n PRECEDING - baris sebelum baris saat ini
  • n FOLLOWING - baris setelah baris saat ini 

Perbedaan antara ROWS & RANGE adalah kriteria ROWS tidak memedulikan nilainya, hanya posisinya, sedangkan RANGE menentukan jendela berdasarkan rentang nilai, bukan posisi baris.

Untuk RANGE, kita harus menentukan ORDER BY --column_name-- karena jika tidak, sistem tidak akan tahu cara memilih jendela.

Contohnya:

ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING

Di sini, sebuah jendela dibuat yang mencakup baris saat ini, baris sebelumnya, dan baris sesudahnya.

RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levels

Di sini, fungsi ini membuat jendela yang mencakup level saat ini, satu level sebelumnya, dan satu level sesudahnya untuk setiap level (diurutkan secara menaik). Jika level saat ini adalah 5, jendela tersebut akan mencakup level 4, 5, dan 6.

Catatan: Penggunaan RANGE BETWEEN mungkin menyebabkan lebih banyak baris disertakan dalam window-mu, karena ini menyertakan semua baris yang memiliki nilai sama dengan nilai dalam rentang, sedangkan ROWS BETWEEN akan selalu menyertakan jumlah baris yang sama (selama tersedia dalam set data). 

Selain itu, RANGE tidak mendukung kolom tanggal.

Berikut contoh sederhana untuk menjelaskan perbedaan ROWS dan RANGE:

Menggunakan ROWS:

SELECT employee_name, salary,
    AVG(salary) OVER (
        ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
    ) as avg_salary_rows

Menggunakan RANGE:

SELECT employee_name, salary,
    AVG(salary) OVER (
        ORDER BY salary
        RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
    ) as avg_salary_range
challenge icon

Tantangan

Mudah

Tabel dan kolom yang tersedia:

  • newspapers: date, num_newspapers

Untuk tantangan ini, kita memiliki data produksi surat kabar. Kita ingin mengetahui rata-rata surat kabar yang dicetak dua hari sebelum baris saat ini dan satu hari sesudahnya. Kita juga ingin mengetahui selisih antara jumlah maksimum dan minimum surat kabar yang dicetak dari tanggal saat ini hingga tiga hari sebelumnya. Beri nama kolom-kolom ini avg_newspapers dan diff_newspapers secara berurutan.

Coba sendiri

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Playground SQL