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ü
ROW_NUMBER(): Her satıra düz bir sıra numarası (1, 2, 3...) atar ve bağları keyfi olarak bozar.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.DENSE_RANK(): Sıraları yoğunlaştırır: 1, 2, 2, 3. Beraberlikten sonra asla boşluk olmaz.
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!
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.
İpucu göster
DENSE_RANK() OVER(ORDER BY id DESC).
3 denemeden sonra çözüm mevcut
Ü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.
İpucu göster
PARTITION BYcategory_id ORDER BY fiyat DESC'yi OVER içinde birleştirin.
3 denemeden sonra çözüm mevcut