T-SQL Analitik Fonksiyonları
Analitik fonksiyonlar, bir grup satırı ele alarak toplam değeri hesaplar. Analitik işlevler, toplama işlevlerinden farklı olarak her grup için birden çok satır döndürebilir. Grup içindeki ortalamaları, değerlerin toplamlarını, yüzdeleri veya ilk N değer üzerinde yapılan işlem sonucunu hesaplamak için analitik işlevleri kullanabilirsiniz.
CUME_DIST
Bir değerin kümesi içindeki kümülatif dağılımını bulmak için CUME_DIST işlevi kullanılır. En basit haliyle bir satırın kümülatif dağılım değeri grupdaki toplam satır sayısına bölünerek hesaplanır. WHERE şartına eklediğimiz ifadeler sonucu gelen sonuç kümesindeki veri sayısı kümülatif değerin oluşmasında etkilidir. Kümülatif dağılım hesabı sonucu olarak 0’la 1 arası değerler döndürülür.
SELECT Name,Color,SafetyStockLevel,ListPrice,
CUME_DIST() OVER(ORDER BY ListPrice) as [Price Distiribution]
FROM [AdventureWorks2017].[Production].[Product]
where Color is not null and
Name like '%Road-250% or Name like '%Mountain-100%'
Burada kümülatif dağılım işlemi ListPrice sütunu üzerinde çalıştırılmıştır. Mountain 100 Silver ailesi ListPrice değeri en yüksek olduğu için kümülatif dağılım değeri 1’dir. Diğer satırdaki kümülatif dağılım değerleri, bu satırdaki değerden düşük veya eşittir. Mesela 12. satırdaki kümülatif dağılım değeri 3374,99 / 3399,99 = 0.75 olarak hesaplanmıştır.
FIRST_VALUE
FIRST_VALUE işlevi ORDER BY ifadesi ile sıralanan kayıtlarda belirtilen sütunun ilk değerini alır.
SELECT Name,Color,SafetyStockLevel,ListPrice,
FIRST_VALUE(Name) OVER(ORDER BY ListPrice ) as First_Value
FROM [AdventureWorks2017].[Production].[Product]
where Name like '%Road-250%' or Name like '%Mountain-100%'
LAST_VALUE
LAST_VALUE işlevi ORDER BY ifadesi ile sıralanan kayıtlarda belirtilen sütundaki son değeri alır.
SELECT Name,Color,SafetyStockLevel,ListPrice,
LAST_VALUE(Name) OVER(ORDER BY ListPrice ) as Last_Value
FROM [AdventureWorks2017].[Production].[Product]
where Name like '%Road-250%' or Name like '%Mountain-100%'
LEAD
LEAD fonksiyonu mevcut satırdan bir veya daha sonraki satır değerini çekmek için kullanılır. Kaç satır sonrası olacağını ise kullanım amacınıza kalmıştır. Çekilen veri kümesinin son satırlarında verilen değere göre NULL ifadesinin görülmesi normaldir.
SELECT Name,Color,SafetyStockLevel,ListPrice,
LEAD(Name,1) OVER(ORDER BY Name) as Offset1,
LEAD(Name,3) OVER(ORDER BY Name) as Offset2
FROM [AdventureWorks2017].[Production].[Product]
LAG
LAG fonksiyonu LEAD fonksiyonunun tam tersidir. Mevcut satırdan bir ya da birkaç önceki satırın değerini çekmek için kullanılır. Kaç satır öncesini çekeceğiniz ise sizin kullanım amacınıza kalmıştır. Çekilen veri kümesinin ilk satırlarında verilen değerlere göre NULL ifadesinin görülmesi normaldir.
SELECT Name,Color,SafetyStockLevel,ListPrice,
LAG(Name,1) OVER(ORDER BY Name) as Offset1,
LAG(Name,3) OVER(ORDER BY Name) as Offset2
FROM [AdventureWorks2017].[Production].[Product]
Yeni makalede görüşmek üzere.
Kaynaklar
Analytic Functions (Transact-SQL)