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 = 1Ingin 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().
Tantangan
MudahTabel 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Lebih dari Dasar-Dasar
3Agregasi dengan Kondisi
COUNT dengan CASESUM dengan CASEMengubah Baris menjadi KolomRangkuman: Sumber Trafik6Resep Analitik
Top-N per GrupPersentase dari TotalTotal KumulatifMenyimpan Satu Baris per KunciRekap: Pelanggan TeratasLatihan sendiri: Playground SQL