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 inin PRECEDING- baris sebelum baris saat inin 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 FOLLOWINGDi sini, sebuah jendela dibuat yang mencakup baris saat ini, baris sebelumnya, dan baris sesudahnya.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsDi 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_rowsMenggunakan RANGE:
SELECT employee_name, salary,
AVG(salary) OVER (
ORDER BY salary
RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
) as avg_salary_rangeTantangan
MudahTabel 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
4Kata Kunci Lainnya
Kata kunci INKata kunci BETWEENKata kunci LIKEKata kunci ASRangkuman: Model Ponsel2Kondisi
Dasar KondisiKata Kunci ANDKata Kunci ORKata Kunci NOTMenggabungkan Beberapa KondisiTanda KurungNilai Boolean3Format Pengembalian Khusus
Nilai nullUrutkan Hasil Bagian 1Urutkan Hasil Bagian 2Ulasan: Perusahaan Keamanan SiberBatasi Jumlah RecordUlasan: Pabrik Kendaraan6Tantangan Pengantar
Ulasan: Pemilihan ParlemenUlasan: Polisi Menangkap Pelaku KejahatanUlasan: Wadah Minuman BarUlasan: Insinyur Membuat Kolom Baru9Beberapa Tabel
Join Dasar Bagian 1Join Dasar Bagian 2Ringkasan: JoinSelf joinRingkasan: Self joinUnionSederhanakan query dengan kata kunci WITHRingkasan: Query WITHRingkasan: Kontraktor Properti12Fungsi Window bagian 2
Fungsi RANK & DENSE_RANKRingkasan, RANK & DENSE_RANKFungsi NTILEFungsi AgregasiKriteria ROWS & RANGELatihan sendiri: Playground SQL