ROWS ve RANGE Çerçevelemesi
Satır tabanlı ve değer tabanlı çerçeveler arasındaki ince ve sık test edilen farkı öğrenin.
ROWS ve RANGE Çerçevelemesi, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.
Mülakatçıların Sorguladığı Ayrım
Birikimli toplam yazabildiğinizde doğal olarak şu devam sorusu gelir: "Bir pencere çerçevesinde ROWS ile RANGE arasındaki fark nedir?" Bu, orta düzey beceriyi gösteren kesin bir işarettir. Birçok aday çerçeveleri her gün kullanır ama bu iki anahtar sözcüğün farklı davrandığını hiç fark etmez.
Her ikisi de toplama işlevinin gördüğü satır kümesini tanımlar, ancak bu kümeyi temelden farklı şekillerde sayar. Bunu doğru yaparsanız öne çıkarsınız.
ROWS Fiziksel Satırları Sayar
ROWS konumsaldır. ROWS BETWEEN 2 PRECEDING AND CURRENT ROW, kelimenin tam anlamıyla geçerli satır ile sıralı dizide doğrudan üstündeki iki fiziksel satır anlamına gelir.
Komşu satırların aynı ORDER BY değerini paylaşıp paylaşmadığını önemsemez. Üç satır, noktası noktasına üç satırdır. Hareketli ortalamalar ve kesin satır bazlı birikimli toplamlar için neredeyse her zaman istediğiniz çerçeve budur.
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) AS rows_sum
FROM sales;RANGE Değere Göre Sayar
RANGE değer tabanlıdır. Geçerli satırın değerinden oluşan mantıksal aralık içine düşen ORDER BY değerine sahip her satırı içerir; bu, satır sayısına göre belirlenen bir küme değildir.
En önemli sonuç şudur: RANGE kullanıldığında ORDER BY değerinde eşit olan tüm satırlar tek bir eş satır grubu olarak ele alınır. Hepsi aynı çerçeveyi ve dolayısıyla aynı sonucu alır.
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS range_sum
FROM sales;Farkı Ortaya Koyan Eşitlik Örneği
İki satışın da 2024-03-02 tarihinde gerçekleştiğini, tutarlarının 30 ve 40 olduğunu ve bunlardan önce 100 tutarında 2024-03-01 tarihli bir satış bulunduğunu varsayalım.
- RANGE ile CURRENT ROW'a kadar: Her iki 03-02 satırı da eş satırdır; bu nedenle ikisi de 100 + 30 + 40 = 170 gösterir.
- ROWS ile CURRENT ROW'a kadar: İlk 03-02 satırı 130, ikincisi 170 gösterir; çünkü her satır çerçeveyi bir seferde bir konum genişletir.
Veri aynı, sayılar farklı. Eşit değerlerdeki bu ayrışma sorunun özüdür.
Varsayılan Neden RANGE Olur
OVER (ORDER BY ...) ifadesinin açık bir çerçeve belirtilmediğinde varsayılan olarak RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW değerini kullandığını hatırlayın.
Bu, basitçe oluşturulmuş birikimli toplamın fark edilmeden RANGE kullandığı anlamına gelir. Benzersiz sıralama anahtarlarında ROWS ile aynıdır, bu nedenle hata gizli kalır. Yinelenen sıralama değerleri ortaya çıktığı anda birikimli toplamınız eşit satırları sessizce tek grupta toplar. Deneyimli mühendislerin ROWS ifadesini açıkça yazmasının nedeni budur.
RANGE ile Sayısal Uzaklıklar
RANGE, yalnızca UNBOUNDED değil, bir değer uzaklığı da alabilir. RANGE BETWEEN 7 PRECEDING AND CURRENT ROW, tarih veya sayısal bir sütun üzerinde, değeri geçerli değerin 7 birimi içinde olan her satırı içerir.
Tarih üzerinde bu, eksik günleri doğru biçimde atlayan gerçek bir "son 7 gün" penceresi sağlar; buna karşılık ROWS 7 PRECEDING, aralıklardan bağımsız olarak önceki 7 satırı alır. Bu ayrıntıyı bilmek güçlü bir yanıttır.
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
RANGE BETWEEN INTERVAL '7 days' PRECEDING AND CURRENT ROW
) AS last_7_days
FROM sales;ROWS Aralıkları Yok Sayar
Öte yandan ROWS, verilerdeki aralık kavramına sahip değildir. Satış tablonuzda hafta sonları eksikse ROWS BETWEEN 6 PRECEDING AND CURRENT ROW, 7 kaydedilmiş güne yayılır; bu da gerçekte iki takvim haftasını kapsayabilir.
Dolayısıyla seçim amaca bağlıdır: son N kayıt demek ROWS; değerin son N birimi (gün, dolar) demek ise uzaklık içeren RANGE kullanmak anlamına gelir.
Lehçe Desteğinin Gerçek Durumu
Dürüst bir mülakat yanıtında destek farklılıklarına değinilir:
- PostgreSQL, uzaklık içeren
RANGEkullanımını (v11'den beri) veROWSkullanımını eksiksiz destekler. - SQL Server,
ROWSveRANGEdestekler; ancakRANGEyalnızcaUNBOUNDED/CURRENT ROWile kullanılabilir, sayısal uzaklıklarla kullanılamaz. - MySQL 8, her ikisini de destekler; ancak
RANGEuzaklık türleri sınırlıdır.
Sayısal bir RANGE uzaklığı kullanılamıyorsa, bunu kendisiyle birleştirme veya oluşturulmuş bir takvim kullanarak taklit edebilirsiniz. Bundan söz etmek, üretim ortamlarına ilişkin farkındalığınızı gösterir.
GROUPS: Üçüncü Kip
Daha az bilinen üçüncü bir çerçeveleme kipi vardır: GROUPS. Satır veya değer yerine eş gruplarını sayar. GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW, geçerli eş grubunu ve ondan önceki grubu içerir.
Buna nadiren ihtiyaç duyulur; ancak "başka çerçeve kipleri var mı?" diye sorulduğunda bundan söz etmek, konuya gerçekten hâkim olduğunuzu gösterir. Destek, PostgreSQL 11 ve sonraki sürümlerinde ve birkaç başka sistemde bulunur.
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
) AS two_day_groups
FROM sales;Ezberden Söyleyebileceğiniz Karar Kuralı
Tüm konuyu, bir mülakatta söyleyebileceğiniz tek bir cümleye indirgeyin:
"Sabit sayıda fiziksel satırı kastediyorsam ROWS, sıralama değerinin mantıksal kapsamını kastediyorsam RANGE kullanırım; ayrıca varsayılan RANGE eşit değerleri birlikte grupladığı için eşitliklerin bu ikisini birbirinden ayırdığını unutmam."
Bu tek cümle, soruyu eksiksiz ve kendinizden emin biçimde yanıtlar.
Yan Yana Karşılaştırma
Her iki çerçevelemeyi tek bir sorguya koymak, aralarındaki farkı görünür kılar. Bunu yinelenen tarihler içeren veriler üzerinde çalıştırıp iki sütunu satır satır karşılaştırın.
Benzersiz tarihlerde sütunlar tamamen aynıdır; eşit tarihli satırlarda RANGE sütunu eş gruplarında aynı toplamı yinelerken ROWS sütunu her seferinde bir adım artar.
SELECT
sale_date,
amount,
SUM(amount) OVER (ORDER BY sale_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rows_total,
SUM(amount) OVER (ORDER BY sale_date
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS range_total
FROM sales;Hızlı Kontrol
Varsayılan bir çerçeve kullanılırken iki satır ORDER BY değerinde eşit. Ne olur?
Özet: ROWS ve RANGE
ROWS fiziksel satırları sayar; RANGE sıralama sütununun mantıksal değerine göre sayar ve eşit değerleri eş olarak gruplar. Varsayılan OVER (ORDER BY ...) çerçevesi RANGE'dir; basit bir çalışan toplamın yinelenen sıralama değerlerini tek bir grupta toplamasının nedeni budur.
"Son N kayıt" ve aralıklardan etkilenmeyen hareketli pencereler için ROWS seçin; aralıkları dikkate alan "son N gün/dolar" hesabı için uzaklık içeren RANGE seçin. GROUPS'ın var olduğunu bilmek artıdır. Sırada, hareketli ortalamalar oluşturmak için ROWS çerçevelemesini uyguluyoruz.
Sıkça Sorulan Sorular
“ROWS ve RANGE Çerçevelemesi” dersi ücretsiz mi?
Evet — “ROWS ve RANGE Çerçevelemesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.
“ROWS ve RANGE Çerçevelemesi” dersinde ne öğreneceğim?
Satır tabanlı ve değer tabanlı çerçeveler arasındaki ince ve sık test edilen farkı öğrenin. Coding Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“ROWS ve RANGE Çerçevelemesi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Coding Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Pencere Çerçeveleriyle Birikimli Toplamlar
- ROWS ve RANGE Çerçevelemesi
- Kayan Pencerelerde Hareketli Ortalamalar
- Birikimli Dağılım ve Toplamın Yüzdesi