Ana içeriğe atla

SQL RANK(): Örneklerle Satırları Nasıl Düzenlersiniz

SQL RANK() fonksiyonunu kullanarak satırlara sıralama atamayı, eşitlikleri ele almayı ve DENSE_RANK() ile ROW_NUMBER() ile karşılaştırmayı öğrenin.
Güncel 4 May 2026  · 6 dk. oku

SQL ile çalışırken verileri sıralamak kolaydır; çünkü satırları düzenlemek için ORDER BY kullanabilirsiniz. Ancak, sonuçları yalnızca sıralamak her satırın bu sıradaki konumunu göstermez. İşte burada sıralama (ranking) devreye girer. Sadece sıralanmış veriyi görüntülemek yerine, belirli ölçütlere göre her satıra 1., 2. veya 3. gibi bir konum atamak isteyebilirsiniz.

RANK() fonksiyonu, tanımlanan düzene göre her satıra sayısal bir derece atayarak bu sorunu çözer. RANK(), bir dizi satır üzerinde hesaplama yaparken yine de her bir satır için sonuç döndürmenizi sağlayan SQL pencere fonksiyonlarının bir parçasıdır. 

Bu eğitimde, RANK() sözdizimini, pratik örnekleri görecek, eşitlikleri nasıl ele aldığını anlayacak ve DENSE_RANK() ve ROW_NUMBER() gibi benzer fonksiyonlarla nasıl karşılaştırıldığını inceleyeceğiz.

SQL’e yeni başlıyorsanız, bizim Introduction to SQL kursuyla başlayın; biraz deneyiminiz varsa Intermediate SQL kursunu tercih edebilirsiniz. 

SQL RANK() Fonksiyonu Nedir?

SQL RANK() fonksiyonu, belirtilen düzene göre her satıra bir derece atayan bir pencere fonksiyonudur. Sıralama tamamen pencere fonksiyonu içindeki ORDER BY ile belirlenir. Yani, ORDER BY ifadesine göre her satıra 1, 2, 3 gibi bir konum verir.

RANK() kullandığınızda şunlara dikkat etmelisiniz:

  • Aynı değere sahip satırlar (eşitlikler) aynı dereceyi alır.
  • Eşitlik olduğunda, sıralama dizisinde boşluklar oluşur. Örneğin, iki satır 2. sırayı alırsa bir sonraki derece 3 değil 4 olur.

SQL RANK() Sözdizimi

RANK() fonksiyonunun temel sözdizimi şöyledir:

RANK() OVER (ORDER BY column)

Burada:

  • OVER ifadesi: Fonksiyonun çalıştığı pencereyi (satır kümesini) tanımlar.

  • ORDER BY: Sıralamanın nasıl uygulanacağını belirler; örneğin yüksekten düşüğe.

  • PARTITION BY (isteğe bağlı): Veriyi gruplara böler ve her grup içinde ayrı ayrı sıralama yapar.

Aşağıda, PARTITION BY ifadesiyle birlikte RANK() fonksiyonunun sözdizimi yer almaktadır:

RANK() OVER (PARTITION BY column1 ORDER BY column2)

SQL RANK() fonksiyonu, başlıca veritabanlarının çoğunda geniş ölçüde desteklenir. Buna PostgreSQL, MySQL (8.0+), Microsoft SQL Server ve Oracle Database dahildir. Sözdizimi büyük ölçüde tutarlıdır; çünkü ANSI SQL standardının bir parçasıdır.

SQL RANK() Temel Örnek

Artık RANK() fonksiyonunun sözdizimini anladığınıza göre, nasıl çalıştığını gösteren basit bir örnek yapalım.

Her çalışanın maaş bilgisini içeren employees tablosuna sahip olduğunuzu varsayalım.

Çalışan tablosu.

Çalışanları maaşlarına göre sıralamak için aşağıdaki sorguyu kullanabilirsiniz.

-- Rank employees by salary
SELECT 
    name,
    salary,
    RANK() OVER (ORDER BY salary DESC) AS rank_position
FROM employees;

Yukarıdaki sorguda, satırlar en yüksek maaştan başlayarak sıralanır; dolayısıyla en yüksek maaş 1. dereceyi alır. İki satırın maaşı aynıysa aynı dereceyi alırlar.

SQL'de RANK() fonksiyonunu kullanma.

Dikkat ederseniz, iki satırın aynı değerleri varsa aynı dereceyi alırlar.

Bundan sonra bir sonraki derece atlanır. SQL, eşitliği hesaba katarak bir sonraki derece değerini atlar.

Gruplama ve veri toplama hakkında daha fazla bilgi edinmek için Introduction to SQL Server kursumuzu öneririm.

PARTITION BY ile SQL RANK()

Daha önce öğrendiğimiz gibi, PARTITION BY ifadesi sıralamayı tüm veri kümesi yerine gruplar içinde uygulamanıza olanak tanır.

Aşağıdaki örnekte, çalışanlar department sütununa göre gruplandırılır ve her departmanda sıralama baştan başlar. Böylece her grubun kendi bağımsız sıralama dizisi olur.

-- Rank employees within each department
SELECT 
    name,
    department,
    salary,
    RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;

PARTITION BY ile SQL RANK() kullanımı

Yukarıdaki sonuçlardan, “Sales” bölümünde hem Emily Johnson hem de Michael Brown’ın 1. dereceyi paylaştığını; “HR” bölümünde ise William Miller ve Olivia Wilson’ın 1. dereceyi paylaştığını görüyoruz.

SQL RANK() vs. DENSE_RANK() vs. ROW_NUMBER()

SQL’de verileri sıralarken RANK(), DENSE_RANK() veya ROW_NUMBER() kullanabilirsiniz. Bu fonksiyonlar benzer görünse de aşağıdaki şekilde davranırlar:

  • RANK(): Eşitlikler aynı dereceyi paylaşır; bu nedenle eşitliklerden sonra boşluklar oluşur.

  • DENSE_RANK(): Eşitlikler aynı dereceyi paylaşır; bu nedenle sıralamada boşluk olmaz.

  • ROW_NUMBER(): Değerler eşit olsa bile her satır benzersiz bir numara alır, eşitlik yoktur.

Bu farkları daha iyi anlamak için aşağıdaki sorguyla yan yana bir karşılaştırma yapalım:

-- Compare RANK() vs DENSE_RANK() vs ROW_NUMBER()
SELECT 
    name,
    salary,

    RANK() OVER (ORDER BY salary DESC) AS rank_val,          -- allows gaps after ties

    DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank1,  -- no gaps, consecutive ranks

    ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num      -- always unique sequence

FROM employees;

SQL RANK() vs. DENSE_RANK() vs. ROW_NUMBER()

Yukarıdaki sonuçlardan hareketle şunları tercih edebilirsiniz:

  • RANK() kullanın: Konum önemliyse ve boşluklar kabul edilebilirse.

  • DENSE_RANK() kullanın: Sürekli (boşluksuz) bir sıralama istiyorsanız.

  • ROW_NUMBER() kullanın: Her satırın benzersiz bir numaraya sahip olması gerekiyorsa; örneğin sayfalama işlemlerinde.

SQL RANK() Ne Zaman Kullanılır?

SQL RANK() fonksiyonu, verileri sıralarken eşitlikleri doğal şekilde ele almak istediğinizde en kullanışlı araçtır. Aşağıdaki kullanım durumları için de önemli buluyorum:

  • Lider tabloları: Skorlara göre oyuncuları veya kullanıcıları derecelendirirken eşit performans için eşitliklere izin vermek istediğinizde.
  • Satış performansını sıralama: Sonuçlar eşit olsa bile gelire göre en iyi çalışanları veya bölgeleri belirlemek istediğinizde.
  • En iyi N değerlerini belirleme: “En yüksek 3 maaş” gibi sorgularda, özellikle eşitliklerin dahil edilmesi gerektiğinde kullanışlıdır.

SQL RANK() ile Yapılan Yaygın Hatalar

SQL RANK() fonksiyonunu kullanırken karşılaştığım bazı hatalar ve bunlardan nasıl kaçınabileceğiniz:

  • ORDER BY’ı unutmak: ORDER BY olmadan sıralamanın tanımlı bir mantığı olmaz ve beklenmedik sonuçlar dönebilir.

  • Eşitlik davranışını yanlış anlamak: Yeni başlayan biri olarak 1, 2, 2, 3 bekleyebilirsiniz; ancak RANK() derecelerde boşluk oluşturur (1, 2, 2, 4).

  • ROW_NUMBER() gerekirken RANK() kullanmak: Benzersiz ardışık değerlere ihtiyacınız varsa ROW_NUMBER() daha iyi bir seçimdir.

  • Gerekliyken PARTITION BY kullanmamak: Bölümleme olmadan sıralama, gruplar içinde değil küresel olarak uygulanır.

SQL RANK() Kullanımı için En İyi Uygulamalar

Sorgularınızı temiz tutmak ve beklediğiniz sonuçları almak için, SQL RANK() fonksiyonunu kullanırken şu en iyi uygulamaları izlemenizi öneririm:

  • Her zaman net bir sıralama tanımlayın: Belirsiz sıralamaları önlemek için ORDER BY ifadesinde DESC gibi yönü açıkça belirtin.

  • Doğru sıralama fonksiyonunu seçin: Eşitlikleri nasıl ele almak istediğinize bağlı olarak RANK(), DENSE_RANK() veya ROW_NUMBER() kullanın.

  • Eşitlik senaryolarını test edin: Canlı ortama almadan önce, mükerrer değerler olduğunda verinizin nasıl davrandığını doğrulayın.

  • Filtreleme ile birleştirin: RANK() fonksiyonunu doğrudan bir WHERE ifadesinde kullanamayacağınız için, “En İyi N” filtrelemesi yapmak istediğinizde sıralama sorgunuzu bir Alt sorgu veya CTE içine almalısınız.

Sonuç

RANK(), özellikle eşit değerler gibi gerçek hayat senaryolarını yansıtmanız gerektiğinde SQL’de sıralı karşılaştırmalar yapmak için kullanışlı bir araçtır. Eşitlikleri nasıl ele aldığını ve neden derecelerin tekrar edip bazı sayıların atlanabileceğini anlamak, doğru analiz için önemlidir. Bu davranışı benimsedikten sonra, belirli kullanım durumunuza en uygun olanı seçmek üzere DENSE_RANK() ve ROW_NUMBER() gibi alternatiflerle ne zaman birlikte kullanmanız gerektiğini bilebilirsiniz.

Artık SQL’de verileri nasıl derecelendireceğinizi öğrendiğinize göre, yetkin bir veri analisti olmakla ilgileniyorsanız gerekli becerileri edinmek için Associate Data Analyst in SQL kariyer yolumuzu incelemenizi öneririm. SQL kullanarak profesyonel panolar oluşturmayı öğrenmek istiyorsanız Reporting in SQL kursumuz da uygundur.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Veri analitiği, iş zekâsı ve veri bilimi alanlarında pratik deneyime sahip Veri Bilimi Teknik Yazarı. SQL, Python, Power BI, Databricks ve veri mühendisliği üzerine, gerçek dünya analitik çalışmalarına dayanan, uygulamaya dönük ve sektöre odaklı içerikler yazıyorum. Yazılarım teknik derinlikle iş etkisi arasındaki köprüyü kurarak profesyonellerin veriyi güvenle karara dönüştürmelerine yardımcı olur.

SQL RANK() SSS

RANK() ORDER BY'dan nasıl farklıdır?

ORDER BY yalnızca satırları sıralar; RANK() ise sıralamadan sonra her satıra sayısal bir konum atar.

RANK() sonuçlarında neden boşluklar var?

Eşitlikler olduğunda birden fazla satır aynı dereceyi paylaştığı için RANK() sonuçlarında boşluklar oluşabilir; bu da bir sonraki dereceyi ileri taşır.

RANK() ile DENSE_RANK() arasındaki fark nedir?

RANK() eşitliklerden sonra boşluklar oluşturur; DENSE_RANK() ise boşluksuz ardışık dereceler atar.

RANK() ile ROW_NUMBER() arasındaki fark nedir?

RANK() eşitliklere izin verir; ROW_NUMBER() ise mükerrerler olsa bile her satıra benzersiz bir numara atar.

RANK() tüm veritabanlarında destekleniyor mu?

PostgreSQL, MySQL (8.0+), Microsoft SQL Server ve Oracle Database dahil olmak üzere çoğu modern veritabanı RANK() fonksiyonunu destekler.

Konular

DataCamp ile SQL Öğrenin

Kurs

Data Manipulation in SQL

4 sa
320.1K
Master the complex SQL queries necessary to answer a wide variety of data science questions and prepare robust data sets for analysis in PostgreSQL.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

Devamını GörDevamını Gör