Lewati ke konten utama
SQL Fundamentals

Lesson 03 / Advanced Querying

Window Function

Menghitung nilai antarbaris tanpa menggabungkan hasil akhir.

EST. 25 MIN

Window Function

Window function menghitung nilai pada sekumpulan baris sambil mempertahankan setiap baris hasil. Contoh sederhana adalah memberi peringkat produk berdasarkan harga.

Tujuan belajar

Setelah lesson ini, kamu dapat memberi peringkat pada setiap baris dengan RANK() OVER (...) dan memakai PARTITION BY untuk memulai perhitungan ulang per kelompok.

SELECT
    product_name,
    price,
    RANK() OVER (ORDER BY price DESC) AS price_rank
FROM products;

Gunakan PARTITION BY bila perhitungan perlu dimulai kembali untuk setiap kelompok, misalnya untuk setiap kategori produk.

Memahami OVER

Bagian OVER (ORDER BY price DESC) menentukan jendela perhitungan. RANK() memberi peringkat, tetapi setiap produk tetap tampil sebagai satu baris hasil. Ini berbeda dari GROUP BY yang biasanya menyatukan banyak baris menjadi satu ringkasan.

SELECT
    category,
    product_name,
    price,
    RANK() OVER (
        PARTITION BY category
        ORDER BY price DESC
    ) AS category_rank
FROM products;

PARTITION BY category membuat peringkat dimulai lagi untuk setiap kategori. DENSE_RANK() mirip RANK(), tetapi tidak melompati nomor setelah nilai seri.

Coba sendiri

Pada dataset HR, gabungkan karyawan dan gaji untuk bulan yang diminta, lalu gunakan RANK() untuk membuat salary_rank dari gaji tertinggi.

Jebakan umum

Window function membutuhkan OVER (...). Bila ingin menyaring hasil peringkat, gunakan CTE atau subquery; hasil window function tidak dapat dipakai langsung di WHERE pada level query yang sama.

Practice

Latihan

02 EXERCISE

  1. EXERCISE 01 / GUIDED_PRACTICE

    Siapkan data gaji untuk ranking

    Sebelum memakai RANK(), gabungkan employees dan salaries untuk bulan 2024-07-01. Tampilkan nama karyawan dan gaji bruto, lalu urutkan dari gaji tertinggi.

    FOCUS
    JOIN, WHERE, and ORDER BY
    DATASET
    HR
    ESTIMATED MINUTES
    6

    Practice workspace

    Tulis dan jalankan query

    Menyiapkan SQL runtime...

    Dataset: HR. Query berjalan lokal di browser.

    Hasil query

    0 ROWS

    Jalankan query untuk menampilkan hasil di sini.

    Masuk untuk menandai latihan selesai.

  2. EXERCISE 02 / GUIDED_PRACTICE

    Beri peringkat gaji karyawan

    Gunakan query latihan sebelumnya, lalu tambahkan RANK() untuk membuat salary_rank dari gaji tertinggi.

    FOCUS
    RANK window function
    DATASET
    HR
    ESTIMATED MINUTES
    10

    Practice workspace

    Tulis dan jalankan query

    Menyiapkan SQL runtime...

    Dataset: HR. Query berjalan lokal di browser.

    Hasil query

    0 ROWS

    Jalankan query untuk menampilkan hasil di sini.

    Masuk untuk menandai latihan selesai.