COMPUTER ENGINEER

Örneklere git
Blog
SQL Server / T-SQL6 dk çalışma
29/ 65

İleri sorgu teknikleri

ROW_NUMBER, RANK ve DENSE_RANK

Sıra numarası ile eşitlik derecesi farklıdır.

AnlaÖrneği inceleKendin uygula

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.

NERESİNDE KULLANIRSIN?

Grup içi ilk kayıt, liderlik listeleri ve tekilleştirme için.

SIK YAPILAN HATA

Eşitlik kuralını anlamadan ROW_NUMBER ve RANK’i birbirinin yerine kullanmak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

T-SQL / SQL Server 2019+
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.

02 / SIRA SENDE

Önce kendin dene.

En yüksek iki farklı maaş düzeyindeki çalışanları getir.

Çözümü ve açıklamasını göster
Açıklamalı çözüm
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.