ROW_NUMBER, RANK, DENSE_RANK
Bölümler içindeki satırları numaralandırın ve sıralayın; eşitliklerde doğru sıralama işlevini seçin.
ROW_NUMBER, RANK, DENSE_RANK, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Üç Numaralandırma İşlevi
Bir bölüm içindeki satırları numaralandıran üç pencere işlevi:
ROW_NUMBER()— 1, 2, 3, 4 (her zaman benzersiz)RANK()— 1, 2, 2, 4 (eşitler aynı sırayı paylaşır, ardından atlama olur)DENSE_RANK()— 1, 2, 2, 3 (eşitler aynı sırayı paylaşır, atlama olmaz)
ROW_NUMBER
Her bölüm içinde 1, 2, 3 numaralarını atar. Eşitlikler gelişigüzel çözülür — belirli ve tutarlı bir sonuç için ORDER BY içinde eşitlik bozucu bir ölçüt belirtin:
SELECT id, user_id, total,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY total DESC, id
) AS rn
FROM orders;Grup Başına En Yüksek N Değer
ROW_NUMBER'ın klasik kullanımı:
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY total DESC
) AS rn
FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;
-- Each user's top 3 orders.RANK
Aynı ORDER BY değerine sahip satırlar aynı sırayı alır; sonraki farklı değer aradaki boşluğu atlar:
-- totals: 100, 90, 90, 70
-- RANK: 1, 2, 2, 4 (skipped 3)
SELECT id, total,
RANK() OVER (ORDER BY total DESC) AS rk
FROM orders;DENSE_RANK
RANK ile aynıdır, ancak arada boşluk bırakmaz:
-- totals: 100, 90, 90, 70
-- DENSE: 1, 2, 2, 3
SELECT id, total,
DENSE_RANK() OVER (ORDER BY total DESC) AS dr
FROM orders;Aralarından Seçme
- Benzersiz numaralara mı ihtiyacınız var (ör. sayfalama)?
ROW_NUMBER - Geleneksel "eşitler aynı sırayı paylaşır, sonraki sıra atlanır" kuralıyla sıralama mı?
RANK - "Eşitler aynı sırayı paylaşır, sonraki değer bir sonraki sırayı alır" kuralıyla sıralama mı?
DENSE_RANK
NTILE: N-Sekantili Kova
NTILE(n), satırları yaklaşık olarak eşit büyüklükte n kovaya dağıtır:
SELECT id, total,
NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 4 = top 25%Yinelenen Satırları Kaldırma
Her yinelenen grup için bir satırı korumak üzere ROW_NUMBER + DELETE kullanın:
WITH dups AS (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
)
DELETE FROM users WHERE id IN (SELECT id FROM dups WHERE rn > 1);Grup Başına Sayfalama
"Her kullanıcının siparişleri, sayfa başına 5 sipariş" listesinin 2. sayfası:
WITH r AS (
SELECT id, user_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn
FROM orders
)
SELECT * FROM r WHERE rn BETWEEN 6 AND 10;PERCENT_RANK ve CUME_DIST
Bölüm içindeki göreli konum:
SELECT id, total,
PERCENT_RANK() OVER (ORDER BY total) AS pct_rank,
CUME_DIST() OVER (ORDER BY total) AS cume_dist
FROM orders;Performans
Numaralandırma işlevleri, her bölüm içinde sıralanmış girdi gerektirir. (partition_col, order_col) üzerindeki bir indeks sıralama adımını önleyebilir.
Özet
Üç numaralandırma işlevi, gereksinimlerin çoğunu karşılar.
- Benzersizlik için ROW_NUMBER
- Eşitlikler içeren sıralama için RANK / DENSE_RANK
- Sekant kovaları için NTILE
Kısa Kontrol
Toplamlar 100, 90, 90, 70 olduğunda DENSE_RANK hangi çıktıyı üretir?
Sıkça Sorulan Sorular
“ROW_NUMBER, RANK, DENSE_RANK” dersi ücretsiz mi?
Evet — “ROW_NUMBER, RANK, DENSE_RANK” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“ROW_NUMBER, RANK, DENSE_RANK” dersinde ne öğreneceğim?
Bölümler içindeki satırları numaralandırın ve sıralayın; eşitliklerde doğru sıralama işlevini seçin. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“ROW_NUMBER, RANK, DENSE_RANK” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD ve Zaman Serisi Kalıpları
- Devam Eden Toplamlar ve Hareketli Ortalamalar