logo

SQL Server'da RANK Fonksiyonu

SQL Server'daki RANK Fonksiyonu bir tür Sıralama Fonksiyonudur. Bu işlev bir çıktının bölümündeki her satıra numara atayın . Her satıra bir artı bir önceki satır sıralaması şeklinde sıralama atar. RANK işlevi aynı bölüm içinde aynı olan iki değeri bulduğunda, bunları aynı sıra numarasıyla atar. Ayrıca sıralamadaki bir sonraki sayı, önceki sıra artı yinelenen sayılar olacaktır. Bu nedenle, bu işlev satırların sıralamasını her zaman ardışık sıraya göre atamaz.

RANK fonksiyonu aynı zamanda pencere fonksiyonlarının bir alt parçasıdır. Bu fonksiyonu kullanırken aşağıdaki noktalara dikkat edilmelidir :

  • Her zaman OVER() cümleciğiyle çalışır.
  • ORDER BY cümleciğine göre her satıra bir sıra atar.
  • Her satıra ardışık sırayla bir sıralama atar.
  • Her yeni bölüm için bir tane olmak üzere her zaman satırlara bir derece atar.

NOT: Sıralama, sorgu yürütüldüğünde bölüm içindeki satırlara geçici değerler atar.

SQL Server aşağıdaki sıralama işlevlerini sağlar :

  • RÜTBE()
  • SATIR NUMARASI()
  • DENSE_RANK()
  • NTILE()

Her bir rütbe fonksiyonunu ayrıntılı olarak öğrenelim. Öncelikle tüm bu fonksiyonların gösterimi için bir tablo oluşturacağız. Aşağıdaki ifadeler adlı bir tablo oluşturur rütbe_demo üç sütunlu:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

Daha sonra bu tabloya aşağıdaki gibi bazı satırlar ekleyeceğiz:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

SELECT ifadesini kullanarak tabloyu doğrulayabiliriz. Aşağıdaki çıktıyı görüntüler:

SQL Server'da RANK Fonksiyonu

RANK() İşlevi

Bu fonksiyon sonuç kümesindeki her satırın sıralamasını belirlemek için kullanılır. Aşağıdaki sözdizimi, SQL Server'da RANK işlevinin kullanımını gösterir:

 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Bu sözdiziminde,

  • OVER cümleciği İlgili pencere işlevi uygulanmadan önce bir sonucun bölümlenmesini ve sıralanmasını ayarlar.
  • PARTITION BY cümleciği FROM yan tümcesinin ürettiği çıktıyı bölüme böler. Daha sonra fonksiyon her bir bölüme uygulanır ve bölüm sınırı bölümleri geçtiğinde yeniden başlatılır. Eğer bu cümleyi tanımlamamışsak, fonksiyon tüm satırları tek bir bölüm olarak ele alacaktır.
  • TARAFINDAN SİPARİŞ Fonksiyon uygulanmadan önce bir veya daha fazla sütun adına göre satırların sırasını azalan veya artan şekilde belirleyen zorunlu bir cümledir.

Örnek

SQL Server'da RANK() fonksiyonunun nasıl çalıştığını görelim. Aşağıdaki ifade, her satıra numaralandırma atamak için rütbe işlevini kullanacaktır:

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

kullanmadığımız için PARTITION BY cümleciği işlevi tüm sonucu tek bir bölüm olarak değerlendirdi. İfadenin yürütülmesi aşağıdaki çıktıyı gösterecektir:

SQL Server'da RANK Fonksiyonu

Bu çıktıda bazı satırların aynı değere sahip olması nedeniyle aynı sıralamayı aldığını görebiliriz. şehir sütunu . Ve sıralamadaki bir sonraki sayı, önceki sıralama artı bir dizi yinelenen sayı olacaktır.

Aşağıdaki ifade başka bir örnek satırları temel alarak bölecek cümle bazında bir bölüm kullanacağımız yer şehir sütununu seçin ve bölüm içindeki her satıra bir sıralama atayın. Çıktının sırası aşağıdakilere dayanmaktadır: ilk adı :

while döngüsünde java yapmak
 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

Aşağıdaki çıktıyı gösterecektir:

SQL Server'da RANK Fonksiyonu

ROW_NUMBER() İşlevi

Bu işlev şunun için kullanılır: her satır için benzersiz sıra numarasını döndür kendi bölümü içinde. Satır numaralandırma birden başlar ve bölümün toplam satır sayısına ulaşılıncaya kadar birer birer artar. Onu RANK() işlevinden farklı kılan benzer değerlere sahip satır için farklı dereceleri döndürür.

Aşağıdaki sözdizimi, SQL Server'da ROW_NUMBER() işlevinin kullanımını gösterir:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Örnek

Her satıra bir sıra numarası atamak için aşağıdaki sorguyu yürütün:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Tabloya göre sıralamayı atayacaktır. şehir . Burada aynı şehir değerlerine sahip satıra farklı dereceler atadığını görüyoruz.

SQL Server'da RANK Fonksiyonu

Sıralama düzenini değiştirirsek artan azalan ORDER BY cümlesiyle bu işlev aynı zamanda RANK'ı da buna göre değiştirecektir. Aşağıdaki açıklamaya bakın:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

İşte sonuç:

SQL Server'da RANK Fonksiyonu

DENSE_RANK() İşlevi

Bu işlev atar bir bölümdeki her satır için benzersiz bir sıralama belirtilen sütun değerine göre herhangi bir boşluk olmadan. Sıralamayı her zaman ardışık sırayla belirtir. Eğer bir alırsak yinelenen değer , bu işlev onu aynı dereceyle atayacaktır ve bir sonraki sıra bir sonraki sıra numarası olacaktır. Bu özellik DENSE_RANK() işlevini RANK() işlevinden ayırır.

Aşağıdaki sözdizimi, SQL Server'da DENSE_RANK() işlevinin kullanımını gösterir:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Örnek

Aşağıdaki sorgu, her satıra bir sıra numarası atamak için DENSE_RANK() işlevini kullanır:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Yinelenen değerlerin aynı sıralamaya sahip olduğunu görebildiğimiz aşağıdaki çıktıyı döndürecektir ve aşağıdaki sıralama bir sonraki sıralı sayı olacaktır.

SQL Server'da RANK Fonksiyonu

PARTITION BY yan tümcesini kullanan DENSE_RANK() işlevinin başka bir örneğidir. Bu madde, satırları şehir sütununa göre böler ve sonuç kümesinin sırası, ilk_adı temel alır:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

Hiçbir iki isim aynı olmadığı için aşağıdaki çıktıyı alacağız. Bu durumda çıktı RANK() fonksiyonuna benzer.

Java'da seçim sıralaması
SQL Server'da RANK Fonksiyonu

İsmi aşağıdaki sorguyla güncelleyelim:

 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

Şimdi aynı sorguyu tekrar yürütün. Bu tablonun aynı adı aldığını göreceğiz. Kaliforniya Şehri . Dolayısıyla her iki ismin de rütbesi aynıdır.

SQL Server'da RANK Fonksiyonu

NTILE(N) İşlevi

Bu işlev şunun için kullanılır: sıralı bir bölümün satırlarını önceden tanımlanmış bir sayıya dağıtın (N) yaklaşık olarak eşit gruplardan. Her satır grubu, tanımlanan duruma göre sıralamasını alır ve numaralandırmaya bir gruptan başlar. Bir atar kova numarası ait olduğu grubu temsil eden bir gruptaki her satır için.

Aşağıdaki sözdizimi, SQL Server'da NTILE() işlevinin kullanımını gösterir:

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Örnek

Aşağıdaki sorgu, her satıra bir sıra numarası atamak için NTILE() işlevini kullanır:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Belirtilen tablo var sekiz kayıt . bu yüzden NTILE(3) sonuç kümesinin bir olması gerektiğini söyler üç kayıttan oluşan grup . İfadenin yürütülmesi aşağıdaki çıktıyı gösterecektir:

SQL Server'da RANK Fonksiyonu

Bu yazıda SQL Server'da kullanılan tüm RANK fonksiyonları çeşitli örneklerle anlatılacaktır. Ayrıca bu işlevler arasındaki temel farkları da gösterir. Bu işlevler, geliştiricilerin verilerini iyi bir şekilde keşfetmeleri ve yönetmeleri için çok faydalıdır.