Ana içeriğe geç
Modül 13 · Ders 3 ders 4Kurstaki 51/57~15 min
Modül dersleri (3/4)

Sıralamalar: ROW_NUMBER, RANK ve DENSE_RANK

Sıralamalar: ROW_NUMBER, RANK ve DENSE_RANK

Toplamanın ötesinde, pencere işlevleri sıralama ve sıralamada öne çıkar. Sıralı sayılar veya sıralama konumları atayan, pencerelerin içinde çalışmak üzere özel olarak tasarlanmış işlevler vardır (OVER() zorunlu hale gelir).

Bunların bir kritere göre çalışmasını sağlamak için, inside OVER() ORDER BY yan tümcesini kullanmamız gerekir.

Sıralama üçlüsü

  1. ROW_NUMBER(): Her satıra düz bir sıra numarası (1, 2, 3...) atar ve bağları keyfi olarak bozar.
  2. RANK(): "Olimpiyat" efektini üretir: 1, 2, 2, 4. Bir boşluk bırakır ("3" atlanır) ve eşitlik durumunda aynı sıralamayı atar.
  3. DENSE_RANK(): Sıraları yoğunlaştırır: 1, 2, 2, 3. Beraberlikten sonra asla boşluk olmaz.
SQL
SELECT
  product_name,
  price,
  RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;

PARTITION BY ve ORDER BY'yı OVER() içinde birleştirerek "her kategori için ilk 3'ü" elde edebiliriz!

Egzersiz#sql.m13.l3.e1
Denemeler: 0Yükleniyor…

Müşteriler tablosundan ('müşteriler') 'ad', 'soyadı' ve 'id'yi çıkarın ('id'nin tanımlayıcı numara olduğunu varsayalım). 'Kimlik' azalan (en yüksekten en düşüğe) dayalı olarak DENSE_RANK() kullanarak bir 'sıralama' sütunu ekleyin.

Düzenleyici yükleniyor…
İpucu göster

DENSE_RANK() OVER(ORDER BY id DESC).

3 denemeden sonra çözüm mevcut

Egzersiz#sql.m13.l3.e2
Denemeler: 0Yükleniyor…

Ürünlerin ('ürünler') fiyatına göre her bir 'category_id' için bir sıralama oluşturun. 'category_id', 'id', 'price'i çıkarın ve ROW_NUMBER() işlevini kullanarak azalan 'fiyat' sırasına göre 'category_id'ye göre bölümlendirerek 'price_rank'ı ekleyin.

Düzenleyici yükleniyor…
İpucu göster

PARTITION BYcategory_id ORDER BY fiyat DESC'yi OVER içinde birleştirin.

3 denemeden sonra çözüm mevcut