Pencere Çerçeveleriyle Birikimli Toplamlar
Sıralanmış bir çerçeveyle SUM OVER kullanarak devam eden toplam oluşturun.
Pencere Çerçeveleriyle Birikimli Toplamlar, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. 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, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
Birikimli Toplam Sorusu
Neredeyse her analist mülakatında şu türden bir soru yer alır: "Zaman içindeki birikimli geliri gösterin." Birikimli toplam, satır satır büyüyen ve başlangıçtan geçerli satıra kadar her şeyi biriktiren bir toplamdır.
Pencere işlevleri ortaya çıkmadan önce adaylar bunu yavaş bir kendi kendine birleştirme veya ilişkili alt sorguyla çözerdi. Günümüzde beklenen yanıt SUM(...) OVER (ORDER BY ...) biçimindedir. Pencere çerçevesi kullanılan biçimi bilmek, yaklaşık 2012 sonrasında yazılan SQL'i anladığınızı gösterir.
Sıralı Pencere Toplamının Yapısı
Birikimli toplam, pencere işlevine dönüştürülmüş bir toplama işleminden ibarettir. SUM(amount) ifadesini korur, ancak ORDER BY içeren bir OVER yan tümcesi eklersiniz.
OVER içindeki ORDER BY, onu birikimli yapan unsurdur: SQL'e satırları bu sırayla biriktirmesini söyler. ORDER BY olmadan SUM, büyümek yerine her satır için tüm bölümlemenin toplamını hesaplar.
SELECT
sale_date,
amount,
SUM(amount) OVER (ORDER BY sale_date) AS running_total
FROM sales
ORDER BY sale_date;ORDER BY Neden Bir Çerçeve Anlamına Gelir
İşte mülakatçıların sormayı sevdiği ayrıntı: bir pencere toplama işlevine ORDER BY eklediğinizde SQL, varsayılan bir çerçeve olan RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ifadesini uygular.
Bu varsayılan değer, birikimli toplamı tam olarak oluşturur: bölümlemenin başlangıcından geçerli satır da dahil olmak üzere geçerli satıra kadar her satır. Bu varsayılanı anlarsanız, birikimli toplamın neden "kendiliğinden çalıştığını" da anlarsınız.
Çerçeveyi Açıkça Yazma
Çerçeveyi elle yazabilirsiniz. Bu iki sorgu aynı sonucu döndürür; ancak açıkça yazılmış sürüm, mülakatçıya perde arkasında ne olduğunu bildiğinizi gösterir.
Bir birikimli toplam için ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW yazmak en güvenli açık biçimdir; çünkü fiziksel satırları sayar ve RANGE kullanımının değerleri gruplamasından kaynaklanan şaşırtıcı sonuçları önler (bir sonraki derste ele alınacaktır).
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_total
FROM sales;Uygulamalı Örnek: Günlük Satışlar
Dört günlük satış olduğunu düşünün: Pzt 100, Sal 50, Çar 200, Per 75. Birikimli toplam soldan sağa doğru artar.
- Pzt: 100
- Sal: 100 + 50 = 150
- Çar: 150 + 200 = 350
- Per: 350 + 75 = 425
Son satır her zaman genel toplama eşittir. Mülakatta belirtebileceğiniz hızlı bir tutarlılık kontrolü şudur: son birikimli toplam değeri, tüm veri kümesi üzerindeki SUM(amount) ile eşleşmelidir.
PARTITION BY ile Grup Başına Sıfırlama
Gerçek sorular genellikle tek bir genel toplam değil, müşteri başına veya bölge başına birikimli toplam ister. PARTITION BY eklediğinizde birikim her bölümlemenin başında yeniden başlar.
Zihinsel modeliniz şöyle olsun: PARTITION BY satırları bağımsız kümelere ayırır; ORDER BY ve çerçeve de her kümenin içinde ayrı ayrı çalışır.
SELECT
customer_id,
sale_date,
amount,
SUM(amount) OVER (
PARTITION BY customer_id
ORDER BY sale_date
) AS customer_running_total
FROM sales;Eşitlik Bozucu Tuzağı
İki satır aynı ORDER BY değerini paylaşıyorsa (aynı gün yapılan iki satış gibi), varsayılan RANGE çerçevesi bunları eş satırlar olarak görür ve her ikisini de içeren aynı birikimli toplamı verir.
Eşit değerlerde bile kesinlikle satır satır artış istiyorsanız ROWS çerçevesine geçin ve ORDER BY ifadesine sale_date, id gibi benzersiz bir eşitlik bozucu ekleyin. Mülakatçılar, bunu fark edip etmediğinizi görmek için özellikle yinelenen tarihler kullanır.
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date, id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_total
FROM sales;Birikimli Sayım
Birikimli mantık yalnızca SUM ile sınırlı değildir. Her toplama işlevi bir pencere işlevi olarak çalışabilir; böylece birikimli bir sayım, birikimli bir ortalama veya birikimli bir maksimum oluşturabilirsiniz.
Siparişlerin birikimli sayısı yaygın bir gösterge panosu ölçüsüdür: her gün itibarıyla şimdiye kadar kaç sipariş aldık?
SELECT
order_date,
COUNT(*) OVER (
ORDER BY order_date
) AS orders_to_date
FROM orders;Eski Yöntem: İlişkili Alt Sorgu
Mülakatçılar bazen derinlemesine bilginizi sınamak için sizden pencere işlevleri olmadan birikimli toplamı çözmenizi ister. Pencere işlevleri öncesindeki klasik çözüm, önceki her satırı yeniden toplayan ilişkili bir alt sorgudur.
Çalışır, ancak O(n kare) karmaşıklığındadır: her satır için tabloyu yeniden tarar. Pencere işlevlerinin neden bunun yerini aldığını bildiğinizi göstermek için bunu belirtin.
SELECT
s.sale_date,
s.amount,
(SELECT SUM(s2.amount)
FROM sales s2
WHERE s2.sale_date <= s.sale_date) AS running_total
FROM sales s
ORDER BY s.sale_date;Filtreleme ve Pencere Sonucu
Sık gelen bir devam sorusu şudur: "Yalnızca birikimli toplamın 1000'i aştığı günleri gösterin." Çerçeve, WHERE çalıştıktan sonra hesaplandığı için bir pencere işlevini WHERE içine koyamazsınız.
Çözüm, birikimli toplamı bir CTE veya alt sorgu içinde hesaplamak, ardından dış sorguda filtrelemektir. Bu, her pencere işlevi için geçerli olan aynı sarmalama kuralıdır.
WITH t AS (
SELECT
sale_date,
SUM(amount) OVER (ORDER BY sale_date) AS running_total
FROM sales
)
SELECT *
FROM t
WHERE running_total >= 1000;Mülakatta Vurgulanacak Noktalar
Bir birikimli toplam yanıtı verirken tam puan almak için şu noktaları açıklayın:
SUM OVER (ORDER BY ...)birikimli biçimdir.ORDER BYeklemek,UNBOUNDED PRECEDINGileCURRENT ROWarasında bir varsayılan çerçeve oluşturur.- Grup başına sıfırlamak için
PARTITION BYkullanın. - Yinelenen değer tuzağından kaçınmak için benzersiz bir eşitlik bozucu ve
ROWSçerçevesi ekleyin. - Sonuca göre filtreleme yapmak için bunu bir
CTEiçine alın.
Kısa Kontrol
Varsayılan çerçeve hakkındaki anlayışınızı sınayın.
Özet: Birikimli Toplamlar
Birikimli toplam, sıralı bir pencere toplama işlevidir. SUM(amount) OVER (ORDER BY sale_date), örtük UNBOUNDED PRECEDING-CURRENT ROW çerçevesi sayesinde bölümlemenin başlangıcından geçerli satıra kadar olan satırları biriktirir.
Grup başına sıfırlamak için PARTITION BY kullanın; yinelenen sıralama değerlerini ele almak için bir eşitlik bozucu ve ROWS çerçevesi ekleyin; birikimli değere göre filtreleme yapmanız gerektiğinde bunu bir CTE içine alın. Sırada, bu derste ipucu verilen ROWS ve RANGE ayrımını inceliyoruz.
Sıkça Sorulan Sorular
“Pencere Çerçeveleriyle Birikimli Toplamlar” dersi ücretsiz mi?
Evet — “Pencere Çerçeveleriyle Birikimli Toplamlar” 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 SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“Pencere Çerçeveleriyle Birikimli Toplamlar” dersinde ne öğreneceğim?
Sıralanmış bir çerçeveyle SUM OVER kullanarak devam eden toplam oluşturun. SQL 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.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL 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 1. dersidir.
“Pencere Çerçeveleriyle Birikimli Toplamlar” 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 SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL 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