- Katılım
 - 7 Nis 2025
 
- Mesajlar
 - 782
 
Geleneksel toplama fonksiyonları (
Pencere Fonksiyonları Nedir? Aggregates vs. Windows
Pencere fonksiyonları, tıpkı toplama fonksiyonları gibi bir dizi satır üzerinde işlem yapar. Ancak temel fark şudur: Pencere fonksiyonları sonuç kümesindeki satırları gruplandırmaz. Bunun yerine, her bir satır için tanımlanmış "pencere"deki (ilgili satırlar kümesi) hesaplamayı gerçekleştirir ve orijinal satırları döndürür.
Pencere fonksiyonları, fonksiyon adından sonra gelen
	
	
	
	
	
		
Pencere fonksiyonları, özellikle finans, raporlama ve veri analizi gibi alanlarda karmaşık hesaplamaları çok daha basit ve anlaşılır hale getirir.
Bu bölümde SQL Pencere Fonksiyonlarının ne olduğunu, nasıl kullanıldığını ve yaygın örneklerini gördük. Bu güçlü araçları öğrenmek, SQL sorgulama yeteneklerinizi büyük ölçüde artıracaktır.
SQL'de ustalaşma yolculuğumuz devam ediyor. Bir sonraki adımda, veritabanı tarafında iş mantığını depolamak ve tekrarlayan görevleri otomatikleştirmek için kullanılan Saklı Yordamlar (Stored Procedures) ve Fonksiyonlar (Functions) konusuna giriş yapabiliriz.
Geleneksel toplama fonksiyonları (
Pencere Fonksiyonları Nedir? Aggregates vs. Windows
Pencere fonksiyonları, tıpkı toplama fonksiyonları gibi bir dizi satır üzerinde işlem yapar. Ancak temel fark şudur: Pencere fonksiyonları sonuç kümesindeki satırları gruplandırmaz. Bunun yerine, her bir satır için tanımlanmış "pencere"deki (ilgili satırlar kümesi) hesaplamayı gerçekleştirir ve orijinal satırları döndürür.
Pencere fonksiyonları, fonksiyon adından sonra gelen
	
	
	
	
	
		
Pencere fonksiyonları, özellikle finans, raporlama ve veri analizi gibi alanlarda karmaşık hesaplamaları çok daha basit ve anlaşılır hale getirir.
Bu bölümde SQL Pencere Fonksiyonlarının ne olduğunu, nasıl kullanıldığını ve yaygın örneklerini gördük. Bu güçlü araçları öğrenmek, SQL sorgulama yeteneklerinizi büyük ölçüde artıracaktır.
SQL'de ustalaşma yolculuğumuz devam ediyor. Bir sonraki adımda, veritabanı tarafında iş mantığını depolamak ve tekrarlayan görevleri otomatikleştirmek için kullanılan Saklı Yordamlar (Stored Procedures) ve Fonksiyonlar (Functions) konusuna giriş yapabiliriz.
				
			COUNT(), SUM(), AVG() vb.) GROUP BY ile birlikte kullanıldığında sonuç kümesindeki satırları gruplandırır ve her grup için tek bir özet değer döndürür. Ancak bazen, her bir orijinal satır için bir toplama değeri hesaplamanız gerekebilir veya bir satırı, onunla ilgili diğer satırlarla karşılaştırmanız gerekebilir. İşte tam bu noktada Pencere Fonksiyonları devreye girer.Pencere Fonksiyonları Nedir? Aggregates vs. Windows
Pencere fonksiyonları, tıpkı toplama fonksiyonları gibi bir dizi satır üzerinde işlem yapar. Ancak temel fark şudur: Pencere fonksiyonları sonuç kümesindeki satırları gruplandırmaz. Bunun yerine, her bir satır için tanımlanmış "pencere"deki (ilgili satırlar kümesi) hesaplamayı gerçekleştirir ve orijinal satırları döndürür.
- Toplama Fonksiyonları (
GROUP BYile): Satırları birleştirir ve grup başına tek satır döndürür.(Bu, her kategori için tek satır ve o kategorinin ortalama fiyatını verir.)Kod:SELECT Kategori, AVG(Fiyat) FROM Urunler GROUP BY Kategori; 
- Pencere Fonksiyonları: Her orijinal satır için bir değer döndürür, ancak bu değer ilgili satırlar (pencere) üzerinden hesaplanır. 
	
	
	
	
(Bu, her ürün satırını döndürür ve her satırın yanında kendi kategorisinin ortalama fiyatını gösterir.)Kod:
SELECT UrunAd, Fiyat, Kategori, AVG(Fiyat) OVER (PARTITION BY Kategori) AS KategoriOrtalamaFiyat FROM Urunler; 
Pencere fonksiyonları, fonksiyon adından sonra gelen
OVER yan tümcesi ile tanımlanır. OVER yan tümcesi, fonksiyonun üzerinde çalışacağı "pencereyi" (satır kümesini) tanımlar.
		Kod:
	
	 Pencere_Fonksiyonu() OVER ( [PARTITION BY sutun1, sutun2, ...] -- Satırları gruplara (partitionlara) ayırır [ORDER BY sutunA, sutunB, ...]     -- Her partition içindeki satırları sıralar [ROWS/RANGE BETWEEN ...]          -- Pencere içindeki satır aralığını tanımlar (daha ileri seviye) )
	
PARTITION BY: Sonuç kümesini bağımsız bölümlere (partition) ayırır. Pencere fonksiyonu her partition içinde ayrı ayrı uygulanır.GROUP BYgibi düşünebilirsiniz ama satırları birleştirmek yerine her satırı kendi partition'ı içindeki diğer satırlarla ilişkilendirir. Atlanırsa, tüm sonuç kümesi tek bir partition olarak kabul edilir.
ORDER BY: Her partition içindeki satırları belirli bir sütun veya sütunlara göre sıralar. Bu, sıralamaya bağımlı pencere fonksiyonları (sıralama, lider/gecikme gibi) için kritiktir.
- Sıralama Fonksiyonları (Ranking Functions): Bir partition içindeki her satıra bir sıralama numarası atar.
ROW_NUMBER():Her satıra benzersiz, ardışık bir sıra numarası verir (1, 2, 3...).
RANK():Aynı değerlere sahip satırlara aynı sırayı verir ve sonraki sırayı atlar (1, 2, 2, 4...).
DENSE_RANK():Aynı değerlere sahip satırlara aynı sırayı verir ancak sonraki sırayı atlamaz (1, 2, 2, 3...).
Kod:SELECT UrunAd, Fiyat, Kategori, ROW_NUMBER() OVER (PARTITION BY Kategori ORDER BY Fiyat DESC) AS KategoriSırası, RANK() OVER (PARTITION BY Kategori ORDER BY Fiyat DESC) AS KategoriRank, DENSE_RANK() OVER (PARTITION BY Kategori ORDER BY Fiyat DESC) AS KategoriDenseRank FROM Urunler ORDER BY Kategori, Fiyat DESC; 
- Toplama (Aggregate) Fonksiyonları (Pencere Fonksiyonu Olarak): Daha önce gördüğünüz toplama fonksiyonlarını 
OVERyan tümcesi ile kullanarak, gruplama yapmadan her satır için bir toplama değeri elde edebilirsiniz.
Örnek: Her ürünün yanında, kendi kategorisindeki en yüksek fiyatı gösterme.
Örnek: Sipariş tarihine göre kümülatif (biriken) toplam sipariş miktarını hesaplama.Kod:SELECT UrunAd, Fiyat, Kategori, MAX(Fiyat) OVER (PARTITION BY Kategori) AS KategoriMaksFiyat FROM Urunler;
(BuradaKod:SELECT SiparisID, SiparisTarihi, Miktar, SUM(Miktar) OVER (ORDER BY SiparisTarihi) AS KumulatifMiktar FROM SiparisDetaylari;PARTITION BYkullanılmadı, bu yüzden tüm sonuç kümesi tek bir pencere olarak kabul edildi ve sıralamaORDER BYile yapıldı.) 
- Analitik Fonksiyonlar (Analytic Functions): Bir penceredeki ilgili satırlara erişim sağlar.
LEAD(sutun, offset, default):[/B]Mevcut satırdan sonrakioffsetsayısı kadar satırdakisutundeğerini getirir.
[*]
[*]LAG(sutun, offset, default):[/B]Mevcut satırdan öncekioffsetsayısı kadar satırdakisutundeğerini getirir.
[*]
[*]FIRST_VALUE(sutun):[/B]Penceredeki ilk satırınsutundeğerini getirir.
[*]
[*]LAST_VALUE(sutun):[/B]Penceredeki son satırınsutundeğerini getirir.
[*]
Örnek: Her siparişin yanında, sonraki siparişin tarihini gösterme.
Örnek: Her ürünün fiyatını, kendi kategorisindeki en ucuz ürünün fiyatıyla karşılaştırma.Kod:SELECT SiparisID, SiparisTarihi, LEAD(SiparisTarihi, 1, 'Yok') OVER (ORDER BY SiparisTarihi) AS SonrakiSiparisTarihi FROM Siparisler;
[*]Kod:SELECT UrunAd, Fiyat, Kategori, FIRST_VALUE(Fiyat) OVER (PARTITION BY Kategori ORDER BY Fiyat ASC) AS KategoriEnUcuzFiyat FROM Urunler;
 
Pencere fonksiyonları, özellikle finans, raporlama ve veri analizi gibi alanlarda karmaşık hesaplamaları çok daha basit ve anlaşılır hale getirir.
GROUP BY ve JOIN'lerle zor veya imkansız olan birçok görevi kolayca yerine getirebilirsiniz.Bu bölümde SQL Pencere Fonksiyonlarının ne olduğunu, nasıl kullanıldığını ve yaygın örneklerini gördük. Bu güçlü araçları öğrenmek, SQL sorgulama yeteneklerinizi büyük ölçüde artıracaktır.
SQL'de ustalaşma yolculuğumuz devam ediyor. Bir sonraki adımda, veritabanı tarafında iş mantığını depolamak ve tekrarlayan görevleri otomatikleştirmek için kullanılan Saklı Yordamlar (Stored Procedures) ve Fonksiyonlar (Functions) konusuna giriş yapabiliriz.
Bölüm 9: İleri SQL: Pencere Fonksiyonları (Window Functions)
Geleneksel toplama fonksiyonları (
COUNT(), SUM(), AVG() vb.) GROUP BY ile birlikte kullanıldığında sonuç kümesindeki satırları gruplandırır ve her grup için tek bir özet değer döndürür. Ancak bazen, her bir orijinal satır için bir toplama değeri hesaplamanız gerekebilir veya bir satırı, onunla ilgili diğer satırlarla karşılaştırmanız gerekebilir. İşte tam bu noktada Pencere Fonksiyonları devreye girer.Pencere Fonksiyonları Nedir? Aggregates vs. Windows
Pencere fonksiyonları, tıpkı toplama fonksiyonları gibi bir dizi satır üzerinde işlem yapar. Ancak temel fark şudur: Pencere fonksiyonları sonuç kümesindeki satırları gruplandırmaz. Bunun yerine, her bir satır için tanımlanmış "pencere"deki (ilgili satırlar kümesi) hesaplamayı gerçekleştirir ve orijinal satırları döndürür.
- Toplama Fonksiyonları (
GROUP BYile): Satırları birleştirir ve grup başına tek satır döndürür.(Bu, her kategori için tek satır ve o kategorinin ortalama fiyatını verir.)Kod:SELECT Kategori, AVG(Fiyat)FROM UrunlerGROUP BY Kategori; - Pencere Fonksiyonları: Her orijinal satır için bir değer döndürür, ancak bu değer ilgili satırlar (pencere) üzerinden hesaplanır.
	
	
	
	
(Bu, her ürün satırını döndürür ve her satırın yanında kendi kategorisinin ortalama fiyatını gösterir.)Kod:
SELECT UrunAd, Fiyat, Kategori,AVG(Fiyat) OVER (PARTITION BY Kategori) AS KategoriOrtalamaFiyatFROM Urunler; 
Pencere fonksiyonları, fonksiyon adından sonra gelen
OVER yan tümcesi ile tanımlanır. OVER yan tümcesi, fonksiyonun üzerinde çalışacağı "pencereyi" (satır kümesini) tanımlar.
		Kod:
	
	Pencere_Fonksiyonu() OVER ([PARTITION BY sutun1, sutun2, ...] -- Satırları gruplara (partitionlara) ayırır[ORDER BY sutunA, sutunB, ...]     -- Her partition içindeki satırları sıralar[ROWS/RANGE BETWEEN ...]          -- Pencere içindeki satır aralığını tanımlar (daha ileri seviye))
	PARTITION BY: Sonuç kümesini bağımsız bölümlere (partition) ayırır. Pencere fonksiyonu her partition içinde ayrı ayrı uygulanır.GROUP BYgibi düşünebilirsiniz ama satırları birleştirmek yerine her satırı kendi partition'ı içindeki diğer satırlarla ilişkilendirir. Atlanırsa, tüm sonuç kümesi tek bir partition olarak kabul edilir.ORDER BY: Her partition içindeki satırları belirli bir sütun veya sütunlara göre sıralar. Bu, sıralamaya bağımlı pencere fonksiyonları (sıralama, lider/gecikme gibi) için kritiktir.
- Sıralama Fonksiyonları (Ranking Functions): Bir partition içindeki her satıra bir sıralama numarası atar.
ROW_NUMBER():Her satıra benzersiz, ardışık bir sıra numarası verir (1, 2, 3...).RANK():Aynı değerlere sahip satırlara aynı sırayı verir ve sonraki sırayı atlar (1, 2, 2, 4...).DENSE_RANK():Aynı değerlere sahip satırlara aynı sırayı verir ancak sonraki sırayı atlamaz (1, 2, 2, 3...).- Örnek: Her kategorideki ürünleri fiyatına göre sıralama.
 
Kod:SELECT UrunAd, Fiyat, Kategori,ROW_NUMBER() OVER (PARTITION BY Kategori ORDER BY Fiyat DESC) AS KategoriSırası,RANK() OVER (PARTITION BY Kategori ORDER BY Fiyat DESC) AS KategoriRank,DENSE_RANK() OVER (PARTITION BY Kategori ORDER BY Fiyat DESC) AS KategoriDenseRankFROM UrunlerORDER BY Kategori, Fiyat DESC; - Toplama (Aggregate) Fonksiyonları (Pencere Fonksiyonu Olarak): Daha önce gördüğünüz toplama fonksiyonlarını 
OVERyan tümcesi ile kullanarak, gruplama yapmadan her satır için bir toplama değeri elde edebilirsiniz.
Örnek: Her ürünün yanında, kendi kategorisindeki en yüksek fiyatı gösterme.
Kod:SELECT UrunAd, Fiyat, Kategori,MAX(Fiyat) OVER (PARTITION BY Kategori) AS KategoriMaksFiyatFROM Urunler;
Örnek: Sipariş tarihine göre kümülatif (biriken) toplam sipariş miktarını hesaplama.
(BuradaKod:SELECT SiparisID, SiparisTarihi, Miktar,SUM(Miktar) OVER (ORDER BY SiparisTarihi) AS KumulatifMiktarFROM SiparisDetaylari;PARTITION BYkullanılmadı, bu yüzden tüm sonuç kümesi tek bir pencere olarak kabul edildi ve sıralamaORDER BYile yapıldı.) - Analitik Fonksiyonlar (Analytic Functions): Bir penceredeki ilgili satırlara erişim sağlar.
LEAD(sutun, offset, default):[/B]Mevcut satırdan sonrakioffsetsayısı kadar satırdakisutundeğerini getirir.
[*]LAG(sutun, offset, default):[/B]Mevcut satırdan öncekioffsetsayısı kadar satırdakisutundeğerini getirir.
[*]FIRST_VALUE(sutun):[/B]Penceredeki ilk satırınsutundeğerini getirir.
[*]LAST_VALUE(sutun):[/B]Penceredeki son satırınsutundeğerini getirir.
[*]Örnek: Her siparişin yanında, sonraki siparişin tarihini gösterme.
Kod:SELECT SiparisID, SiparisTarihi,LEAD(SiparisTarihi, 1, 'Yok') OVER (ORDER BY SiparisTarihi) AS SonrakiSiparisTarihiFROM Siparisler;
Örnek: Her ürünün fiyatını, kendi kategorisindeki en ucuz ürünün fiyatıyla karşılaştırma.
Kod:SELECT UrunAd, Fiyat, Kategori,FIRST_VALUE(Fiyat) OVER (PARTITION BY Kategori ORDER BY Fiyat ASC) AS KategoriEnUcuzFiyatFROM Urunler; 
Pencere fonksiyonları, özellikle finans, raporlama ve veri analizi gibi alanlarda karmaşık hesaplamaları çok daha basit ve anlaşılır hale getirir.
GROUP BY ve JOIN'lerle zor veya imkansız olan birçok görevi kolayca yerine getirebilirsiniz.Bu bölümde SQL Pencere Fonksiyonlarının ne olduğunu, nasıl kullanıldığını ve yaygın örneklerini gördük. Bu güçlü araçları öğrenmek, SQL sorgulama yeteneklerinizi büyük ölçüde artıracaktır.
SQL'de ustalaşma yolculuğumuz devam ediyor. Bir sonraki adımda, veritabanı tarafında iş mantığını depolamak ve tekrarlayan görevleri otomatikleştirmek için kullanılan Saklı Yordamlar (Stored Procedures) ve Fonksiyonlar (Functions) konusuna giriş yapabiliriz.
		        


