Menu
Coddy logo textTech

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ır
  • n PRECEDING - geçerli satırdan önceki satırlar
  • n 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 FOLLOWING

Burada 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 levels

Burada, 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_rows

RANGE kullanımı:

SELECT employee_name, salary,
    AVG(salary) OVER (
        ORDER BY salary
        RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
    ) as avg_salary_range
challenge icon

Görev

Kolay

Kullanı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

quiz iconKendini test et

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

Kendi başına pratik yap: SQL playground