Üç sıralama fonksiyonu
| Maaş | ROW_NUMBER | RANK | DENSE_RANK |
|---|---|---|---|
| 90.000 | 1 | 1 | 1 |
| 80.000 | 2 | 2 | 2 |
| 80.000 | 3 | 2 | 2 |
| 70.000 | 4 | 4 | 3 |
- ROW_NUMBER: Her satıra benzersiz numara. Eşitlikte sıra rastgele olabilir.
- RANK: Eşitlere aynı sıra, sonra boşluk bırakır (olimpiyat sıralaması).
- DENSE_RANK: Eşitlere aynı sıra, boşluk bırakmaz.
SELECT first_name, dept_id, salary,
RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS dept_sira
FROM employees
WHERE dept_id IS NOT NULL;
Her gruptaki ilk N: en sık sorulan mülakat sorusu
“Her kategorinin en pahalı 2 ürünü” gibi sorular için sırala, sonra dış sorguda filtrele:
WITH s AS (
SELECT category, name, price,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY price DESC) AS rn
FROM products
)
SELECT category, name, price
FROM s
WHERE rn <= 2
ORDER BY category, rn;
TekilleştirmeAynı kaydın birden çok versiyonu varken en günceli seçmek için de bu kalıp kullanılır:
ROW_NUMBER() OVER (PARTITION BY anahtar ORDER BY guncelleme DESC) = 1.Derinleş: hangi sıralama fonksiyonu?
| İstek | Fonksiyon |
|---|---|
| Grup başına tam olarak N satır | ROW_NUMBER (eşitlikte ikinci sıralama anahtarı ekle) |
| Eşitlerin hepsi dahil “ilk N değer” | DENSE_RANK |
| Yarışma sıralaması (1, 1, 3) | RANK |
| Tekrarlı kayıtlardan birini seçmek | ROW_NUMBER … = 1 |