İleri sorgu teknikleri
ROW_NUMBER, RANK ve DENSE_RANK
Sıra numarası ile eşitlik derecesi farklıdır.
Kavramı anlayalım
ROW_NUMBER her partition içinde benzersiz sıra numarası verir. RANK eşit değerlere aynı dereceyi verip sonraki derecede boşluk bırakır; DENSE_RANK boşluk bırakmaz. Eşit maaşları olan iki çalışan sırasıyla farklı numara, aynı rank veya aynı dense rank alabilir.
ROW_NUMBER için deterministik sonuç gerekiyorsa sıralamaya benzersiz anahtar ekle. Ancak RANK ORDER BY listesine de bu anahtarı eklersen maaş eşitliği artık eşit sıralama değildir. “En yüksek üç kayıt” ile “en yüksek üç farklı maaş” sorularını ayır.
NTILE bir partition’ı yaklaşık eşit satır sayılı gruplara dağıtır. Eşit ölçüm değerlerini farklı kovaya ayırabilir; bu yüzden istatistiksel yüzde eşikleriyle aynı olduğunu varsayma.
Grup içi ilk kayıt, liderlik listeleri ve tekilleştirme için.
Eşitlik kuralını anlamadan ROW_NUMBER ve RANK’i birbirinin yerine kullanmak.
Aynı konu. Üç farklı derinlik.
SELECT FullName, ROW_NUMBER() OVER (ORDER BY Salary DESC, EmployeeId) AS Position FROM lab.Employee;Benzersiz 1–5 sıralaması oluşur.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
En yüksek iki farklı maaş düzeyindeki çalışanları getir.
Çözümü ve açıklamasını göster
WITH R AS (SELECT FullName, Salary, DENSE_RANK() OVER (ORDER BY Salary DESC) AS r FROM lab.Employee) SELECT * FROM R WHERE r <= 2;Rasim ve Ada. Eşit maaş olsaydı aynı dereceye ait bütün çalışanlar korunurdu.