Anasayfa | Hakkımda | Kitaplarım | RSS Site içinde
Kategoriler
» SQL Server 2012
» SQL Server 2008
» C#
» MySQL
» Hayata Dair
» Güncel Haber-Duyuru
» Bir Soru Bir Cevap
» Oracle ve Diğer VTYS
» Java

Analitik Fonksiyonları Anlamak

26.12.2011 00:00:00
Analitik fonksiyonlar, SQL-2003 ve SQL-2008 standartları ile tanımlanan fonksiyon grupları olup, kayıtları okurken, sıralama, gruplama ve kıyaslama gibi ek işlevler sunmak üzere tanımlanmışlardır. Bütün analitik fonksiyonları bir tek makalede ele almak kafa karıştırıcı olabilir. Bu nedenle, şimdilik basit bir örnek soru ve cevap eşliğinde en basit şekli ile ele alalım.

Analitik fonksiyonlar, SQL-2003 ve SQL-2008 standartları ile tanımlanan fonksiyon grupları olup, kayıtları okurken, sıralama, gruplama ve kıyaslama gibi ek işlevler sunmak üzere tanımlanmışlardır. Bütün analitik fonksiyonları bir tek makalede ele almak kafa karıştırıcı olabilir. Bu nedenle, bu makalede en çok ihtiyaç duyulanları ele alacağız.

Konunun daha kolay anlaşılması açısından, bir soru ile başlayalım: Bir ürünler tablosu şu şekilde veriliyor: tblUrun(#urunKod, urunAd, listeFiyat). Bu tablodaki ürünleri, urunKod sütununa göre sıraladıktan sonra kendisinden bir önce gelen üründen daha pahalı ve kendisinden sonra gelen üründen daha ucuz olan ürünlerin listesini basit bir SELECT cümlesi ile nasıl bulursunuz?

Bu türden bir problemle SQL Server’da karşılaştığımızda bir çoğumuz çözüm olarak Cursor’ler üstünden ilerlemeyi düşünür. Geri kalanların bir kısmı Rütbeleme Fonksiyonları(Ranking Functions) üstünden ilerlemek üzere plan yapar. SQL Server 2012’deki yeniliklerden haberdar olanlar veya daha önceden Oracle’da bu tür sorgular yazmış olanlar da LEAD ve LAG fonksiyonları ile bu problemi basit bir SELECT ifadesinde bitirebileceğini bilir.

Örnek sorunun cevabı şu şekilde olabilir:
SELECT * FROM
(
   SELECT urunKod,urunAd,listeFiyat,
		LEAD(listeFiyat,1) OVER(ORDER BY urunKod) AS sonrakiListeFiyat,
		LAG(listeFiyat,1) OVER (ORDER BY urunKod) as oncekiListeFiyat
	FROM tblUrun
) T 
WHERE listeFiyat > oncekiListeFiyat AND listeFiyat < sonrakiListeFiyat

Örnekte, LEAD, LAG fonksiyonları ile birlikte, bir adet de T türetilmiş tablosunu kullandık.
Şekil-1: LEAD ve LAG analitik fonksiyonları ile bir sonraki ve bir önceki değerleri kıyaslamak mümkündür.

Sonuç olarak analitik fonksiyonlar kullanmak bazen, cursor ve karmaşık hesaplamalarla yapılabilecek işlemleri kolayca yapabilmemizi sağlar.


Konuya müdahil olmak ister misiniz?
Başlık:  
İsim  :  
URL   :
Yorum