ROWS ve RANGE Ölçütü
Coddy'nin SQL Journey'sinin Temeller bölümünün bir parçası. Ders 69 / 72.
Şu an itibarıyla, dikkate alınacak önceki veya sonraki satır sayısını seçme konusunda esnek olamıyoruz. Artık ROWS & RANGE ölçütleriyle bu mümkün. Bunları kullanmak için şunu yazarız:
OVER (ROWS BETWEEN --START-- AND --END--)
OVER (RANGE BETWEEN --START-- AND --END--)
Ve aşağıdaki seçenekleri belirtebiliriz:
CURRENT ROW- geçerli satırn PRECEDING- geçerli satırdan önceki satırlarn FOLLOWING- geçerli satırdan sonraki satırlar
ROWS & RANGE arasındaki fark, ROWS ölçütünün değerleri önemsemeyip yalnızca konumları dikkate alması, RANGE ölçütünün ise pencereyi satır konumları yerine değer aralıkları cinsinden tanımlamasıdır.
RANGE için, pencereyi nasıl seçeceğini bilemeyeceğinden ORDER BY --column_name-- belirtmek zorundayız.
Örneğin:
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWINGBurada mevcut satırı, ondan önceki satırı ve ondan sonraki satırı içeren bir pencere oluşturur.
RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ORDER BY levelsBurada, her seviye için (artan düzende sıralanmış olarak) mevcut seviyeyi, ondan bir önceki seviyeyi ve ondan bir sonraki seviyeyi içeren bir pencere oluşturur. Mevcut seviye 5 ise 4, 5 ve 6. seviyeleri içerir.
Not: RANGE BETWEEN kullanımı pencerenize daha fazla satırın dahil edilmesine neden olabilir; çünkü aralıktaki değerlerle aynı değerlere sahip tüm satırları dahil ederken ROWS BETWEEN, veri kümesinde mevcut oldukları sürece her zaman aynı sayıda satırı dahil eder.
Ayrıca RANGE tarih sütunlarını desteklemez.
ROWS ile RANGE arasındaki farkı açıklamak için basit bir örnek:
ROWS kullanımı:
SELECT employee_name, salary,
AVG(salary) OVER (
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
) as avg_salary_rowsRANGE kullanımı:
SELECT employee_name, salary,
AVG(salary) OVER (
ORDER BY salary
RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
) as avg_salary_rangeGörev
KolayKullanılabilir tablolar ve sütunlar:
newspapers:date,num_newspapers
Bu görev için üretime ait gazete verilerimiz var. Mevcut satırdan iki gün önce ve bir gün sonra basılan ortalama gazete sayısını öğrenmek istiyoruz. Ayrıca mevcut tarih ile ondan önceki üç gün arasında basılan maksimum ve minimum gazete sayıları arasındaki farkı öğrenmek istiyoruz. Bu sütunları sırasıyla avg_newspapers ve diff_newspapers olarak adlandırın.
Kendin dene
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Daha Fazla Anahtar Sözcük
IN anahtar sözcüğüBETWEEN anahtar sözcüğüLIKE anahtar sözcüğüAS anahtar sözcüğüTekrar - Cep Telefonu Modelleri2Koşullar
Koşulların TemelleriAND Anahtar SözcüğüOR Anahtar SözcüğüNOT Anahtar SözcüğüBirden Çok Koşulu BirleştirmeParantezlerBoolean Değerler3Belirli Döndürme Biçimi
Null değerlerSonuçları Sıralama 1. BölümSonuçları Sıralama 2. BölümTekrar - Siber Güvenlik FirmasıKayıt Sayısını SınırlamaTekrar - Araç Fabrikası6Giriş Alıştırmaları
Tekrar - Parlamento SeçimiTekrar - Polisin Suçluyu TutuklamasıTekrar - Bar İçecek KabıTekrar - Mühendis Yeni Sütunlar9Birden Çok Tablo
Temel JOIN Bölüm 1Temel JOIN Bölüm 2Tekrar - JOINKendine JOINTekrar - Kendine JOINUNIONSorguları Basitleştirme, WITH Anahtar SözcüğüTekrar - WITH SorgularıTekrar - Gayrimenkul Müteahhidi12Pencere Fonksiyonları 2. Bölüm
RANK ve DENSE_RANK FonksiyonlarıTekrar - RANK ve DENSE_RANKNTILE FonksiyonuToplama FonksiyonlarıROWS ve RANGE ÖlçütüKendi başına pratik yap: SQL playground