Pelajaran modul (1/4)
Pendahuluan dan klausa OVER
Pendahuluan dan Klausul OVER
Dalam pelajaran sebelumnya kita melihat cara menggunakan GROUP BY untuk menggabungkan data. Namun, GROUP BY memiliki batasan yang sangat besar: menciutkan baris. Jika Anda mengelompokkan berdasarkan kota, Anda mendapatkan satu baris per kota dan kehilangan detail masing-masing pelanggan.
Di sinilah Fungsi Jendela berperan. Mereka memungkinkan Anda menjalankan penghitungan agregat (seperti jumlah atau rata-rata) sambil mempertahankan baris asli.
Klausa OVER()
Kata kunci ajaibnya adalah OVER(). Ini memberitahu database bahwa fungsi agregat (misalnya SUM, AVG, COUNT) harus diperlakukan sebagai fungsi jendela, dihitung pada seluruh kumpulan hasil ("jendela" global) tetapi diterapkan dan dikembalikan pada setiap baris.
SELECT
order_id,
total_amount,
AVG(total_amount) OVER() AS global_average
FROM orders;Dalam contoh ini, kami menyimpan setiap pesanan individual, namun setiap baris juga memiliki kolom global_average dengan rata-rata dari semua pesanan. Sangat berguna, misalnya, untuk mengukur seberapa besar suatu pesanan menyimpang dari rata-rata!
Pilih kolom 'harga' dari tabel 'produk'. Tambahkan kolom bernama 'global_max_price' yang berisi harga maksimum yang dihitung dengan fungsi jendela di seluruh tabel.
Tunjukkan petunjuk
Gunakan MAX(harga) dikombinasikan dengan OVER().
Solusi tersedia setelah 3 upaya
Ekstrak 'id', 'price' dan tambahkan harga rata-rata keseluruhan ('global_avg') dari tabel 'produk'.
Tunjukkan petunjuk
Cukup tambahkan AVG(harga) OVER().
Solusi tersedia setelah 3 upaya