Postgres Sıralaması

Postgres Siralamasi



PostgreSQL'de rank() işlevi, belirli bir sıralama kriterine göre bir sonuç kümesindeki her satıra bir derece atamamıza izin veren bir Pencere işlevidir. Çoğu pencere işlevinde olduğu gibi, sıralama işlevi, belirli bir sonuç kümesindeki diğerlerine göre bir satırın sıralamasını belirlemek gibi analitik sorgularda faydalıdır.

Bu öğretici, PostgreSQL işlevleriyle nasıl çalışılacağını araştırıyor. Ayrıca fonksiyon sözdizimini ve parametrelerini inceliyor ve bazı pratik örneklere bakıyoruz.

PostgreSQL Rank() İşlevi

Aşağıda, PostgreSQL'deki rank() işlevinin sözdizimi gösterilmektedir:







RANK() OVER (bölüm_ifadesine göre BÖLÜNME, ORDER BY sort_expression [ASC|DESC])

rank() işlevini çağırarak başlıyoruz. Daha sonra, bir pencere işlevi işlemi gerçekleştirmek istediğimizi belirtmek için OVER anahtar sözcüğünü kullanırız.



Sırada PARTITION BY partition_expression var. Bu yan tümce, satırları belirli bir ifadeye göre çeşitli bölümlere ayırır. Sıralama, her yeni bölüm için sıra tamsayı değerinin 1'den başladığı her bölümde bağımsız olarak yapılır.



Son olarak, satır sırasını belirleyen sütunu veya ifadeyi belirten ORDER BY yan tümcesine sahibiz.





PostgreSQL Rank() İşlev Örneği

Aşağıdaki sorgu, PostgreSQL'in rank() işlevini kullanmanın temel bir örneğini gösterir:

SEÇ değeri, RANK() OVER (ORDER BY değeri) AS rank
İTİBAREN (
DEĞERLER (10), (20), (5), (15), (10)
) AS verileri(değer);

Bu örnekte, değerleri artan sıralarına göre sıralıyoruz. Değerin iki oluşumu, benzer olduklarından ve sıra içinde aynı konumda göründüklerinden aynı sıra ile atanır.



Ortaya çıkan tablo aşağıdaki gibidir:

SEÇ değeri, RANK() OVER (PARTITION BY değeri % 2 ORDER BY değeri) AS rank
İTİBAREN (
DEĞERLER (10), (20), (5), (15), (10)
) AS verileri(değer);

Partition By Clause ile PostgreSQL Rank() İşlev Örneği

Aşağıdaki örneği göz önünde bulundurun:

SEÇ değeri, RANK() OVER (PARTITION BY değeri % 2 ORDER BY değeri) AS rank
İTİBAREN (
DEĞERLER (10), (20), (5), (15), (10)
) AS verileri(değer);

Bu örnekte, değerin çift mi yoksa tek mi olduğunu kontrol eden bir ifade ile PARTITION BY deyimini ekledik. Bu, değerleri etkili bir şekilde iki bölüme ayırmalıdır: biri çift sayılar için (kalan 0'dır) ve diğeri tek sayılar için (kalan 1'dir).

Ortaya çıkan küme aşağıdaki gibidir:

Birden Çok SQL Özelliğini Birleştirerek PostgreSQL Rank() İşlev Örneği

Ayrıca rank() işlevini kullanarak daha karmaşık sorgular da oluşturabilirsiniz. Örneğin, Pagila veritabanını ele alalım. Toplam kira ödemelerine göre en iyi beş müşteriyi getirmek ve onlara dereceler atamak istediğimizi varsayalım.

rank() işlevini aşağıdaki sorguda gösterildiği gibi kullanabiliriz:

müşteri_kimliği, ad_ad, soyad, toplam_ödemeler SEÇİN,
RANK() OVER (ORDER BY total_payments DESC) AS sıralaması
İTİBAREN (
total_payments olarak c.customer_id, c.first_name, c.last_name, SUM(p.amount) SEÇİN
C müşterisinden
JOIN ödemesi AÇIK c.customer_id = p.customer_id
GRUPLAMA TARAFINDAN c.müşteri_kimliği, c.ilk_adı, c.last_adı
) AS müşteri_ödemeleri
Rütbeye Göre SİPARİŞ
SINIR 10;

Bu örnekte, müşteri_kimliği, ad_adı, soyadı, toplam_ödeme ve atanan sıralamayı() seçiyoruz. Ardından, azalan düzende sıralanan total_payment'a dayalı olarak her müşteriye bir sıralama atamak için rank() işlevini kullanırız.

İç alt sorgu, müşteri ve ödeme tablolarını birleştirerek her bir müşteri için toplam ödemeleri hesaplamamızı sağlar. Daha sonra, her bir müşteri için ödemelerin toplamını almak için sonucu müşteri_kimliği, ad ve soyadı sütunlarına göre gruplandırırız.

Son olarak dış sorguda ise sonuç kümesi üzerinden rank() fonksiyonunu uyguluyoruz ve total_payments'a göre artan düzende sıralıyoruz. Ayrıca, yalnızca ilk 10 satırı getirmek için limit yan tümcesini de ekliyoruz.

Gördüğünüz gibi, sıralama, filtreleme, birleştirmeler, birleştirmeler ve daha fazlası gibi birden çok SQL özelliğini birleştirerek daha anlayışlı veriler oluşturabilirsiniz.

Çözüm

Tanımlanan koşullara dayalı olarak bir sonuç kümesinden belirli bir satırın sıralamasını almak için PostgreSQL'de rank() işleviyle nasıl çalışabileceğimizi araştırdık. Daha karmaşık sorgular oluşturmak için rank() işlevinin diğer SQL araçlarıyla nasıl birleştirileceğini de ele aldık.