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)

Leave a Reply

Your email address will not be published. Required fields are marked *