Son Haberler
Anasayfa / Yazılım / SQL / OVER Deyiminin Toplama Fonksiyonları İle Birlikte Kullanılması

OVER Deyiminin Toplama Fonksiyonları İle Birlikte Kullanılması

OVER deyimi toplama fonksiyonu içermeyen bir sorguya toplama fonksiyonlarının eklenebilmesi için kullanılabilir. Söz dizimi aşağıdaki gibidir :

SELECT kolon1, toplama fonksiyonu(kolon2) OVER((PARTITION BY kolon3)) FROM tablo1

Bununla alakalı bir örnek yaparsak, adventureworks2012 veri tabanı üzerinde bir sorgu oluşturuyorum.

SELECT CustomerID, SalesOrderID, TotalDue, AVG(TotalDue) OVER(PARTITION BY CustomerID)
AS OrtalamaTotalDue, SUM(TotalDue) OVER(PARTITION BY CustomerID) AS ToplamTotalDue,
TotalDue/(SUM(TotalDue) OVER(PARTITION BY CustomerID))*100 AS MusteriBasinaSatisYuzdesi,
SUM(TotalDue) OVER() AS TumSatislar FROM Sales.SalesOrderHeader ORDER BY CustomerID;

Burada PARTITION BY ifadesi ile hesaplanan kolon üzerinde gruplama yapıyoruz. Bu gruplamayı da CustomerID alanına göre yapıyoruz. TumSatislar kısmına baktığımızda ise burada görüleceği üzere PARTITION BY kullanılmamış, buradaki gruplama ise tüm dönecek sonuç üzerinden yapılıyor.

2013040101

Bu sorgu içinde gruplama yapmak için sorgulamanın tamamında GROUP BY kullanabiliriz. Tabi burada dikkat edilmesi gereken OVER deyimi ile bağlantılı olan her kısım (toplama fonksiyonu) gruplanmalıdır. Eğer mutlaka böyle bir şey yapmak gerekiyor ise bunu CTE ile çözmek daha mantıklı olur.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir