Menu
CoddyTech

Top-N per Grup

Termasuk bagian Lebih dari Dasar-Dasar dalam perjalanan SQL di Coddy. Pelajaran 23 dari 27.

"Karyawan dengan gaji tertinggi di setiap departemen" adalah contoh yang umum digunakan di buku teks. Caranya selalu menggunakan ROW_NUMBER() dengan PARTITION BY, lalu memfilter hasilnya agar hanya menyisakan baris 1.

WITH ranked AS (
    SELECT name, department, salary,
           ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
    FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1

Ingin 3 teratas alih-alih 1 teratas? Ubah WHERE rn = 1 menjadi WHERE rn <= 3. Ingin mengizinkan nilai seri di posisi teratas? Ganti ROW_NUMBER() dengan RANK().

challenge icon

Tantangan

Mudah

Tabel dan kolom yang tersedia:

  • employees: id, name, department, salary

Kembalikan karyawan dengan gaji tertinggi di setiap department. Tampilkan name, department, dan salary, diurutkan berdasarkan department. Jika dua karyawan memiliki gaji tertinggi yang sama di suatu departemen, kembalikan hanya satu: karyawan dengan id yang lebih rendah.

Coba sendiri

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
quiz iconUji dirimu

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

Semua pelajaran di Lebih dari Dasar-Dasar

Latihan sendiri: Playground SQL