Merhaba;
Pek çok sql sunucusunda (Oracle), hatta eski veritabanı yönetim sistemi yazılımlarında (DBase) temel itatistik fonksiyonları var.
Şimdiye kadar ihtiyacım olmamıştı. Fakar firebird te temel istatistiksel fonksiyonların bulunduğunu tahmin ederdim. Vesileniz ile bunun böyle olmadığı öğrendim.
UDF ile standart sapma hesabı bana pek olanaklı gelmiyor. Sizinde belirttiğiniz gibi belli bir alanın tüm eğerlerini UDF e geçirmek pek olası değil. Bellek yönetimi çok zor olur böyle bir durumda.
Firebird UDf kütüphanelerini araştırdım standart sapma yada varyans hesaplayan bir örnek bulamadım.
Aslında UDF e gerek yok. Bu hesap başka türlüde yapılabilir.
Ben önce daha genel bir form yakalamak için Stored Procedure kullanmayı düşündüm ama tablo ve alan ismini parametre olarak geçirmedikçe genel bir form elde etmek mümkün olmadı.
O zaman ne yapacaz. Size küçük bir örnek gösterdiğimde beyninizde bir ışık yanacaktır. Ama sorunlar bitmedi. Önce örnek.
sarfhareket adında bir tablomuz var.
Alisfiyati ise varyansını hesaplayacağımız alan (field).
AlisfiyatiVaryansi sonucu atayacağımız alias field. Where kısmı önemli değil. Benim için gerekliydi yazdım.
Kodumuz şöyle. Burda yaptığımız şey basit. Sadece Varyansın hesaplama formülünü kullandık.
Kod: Tümünü seç
Select (SUM(ALISFIYATI*ALISFIYATI)-(AVG(ALISFIYATI)*AVG(ALISFIYATI)*Count(ALISFIYATI)))/(Count(ALISFIYATI)-1) AS AlisfiyatiVaryansi from sarfhareket
Where (ALISFIYATI is not null) and (ALISFIYATI>0)
Sorun ne mi? Efendim bu
Alisfiyati alanımız 2 haneli ondalığa sahip bir NUMERIC alan. Buna rağmen yukarıdaki script çalıştırılınca FIREBIRD ondalık sayıları ihmal ediyor. Bu nedenlede yaklaşık bir VARYANS değeri elde ediyoruz. Pek çok örnekte bu yaklaşık değer işimizi görmeyecektir. Ve hatta bazı örneklemlerde VARYANS negatif çıkabilir (ki bu tanım gereği imkansiz aslında)
Firebird ün bu konuda zorluk çıkarması beni gücendirdi doğrusu. Firebird ten daha iyi bir iş çıkarmasını beklerdim. Fakat belki bu sorunu çözebilecek bir arkadaşımız çıkabilir.
Kolay gelsin.