| From: | Recep KIRMIZI <rkirmizi(at)gmail(dot)com> |
|---|---|
| To: | "N(dot) Can KIRIK" <can(at)epati(dot)com(dot)tr> |
| Cc: | Uygar UZUNHASAN <uygaruzunhasan(at)yahoo(dot)com>, "pgsql-tr-genel(at)postgresql(dot)org" <pgsql-tr-genel(at)postgresql(dot)org> |
| Subject: | Re: [pgsql-tr-genel] Re: Yan: [pgsql-tr-genel] Re: [pgsql-tr-genel] kümülatif toplam sorgusu |
| Date: | 2013-09-10 11:44:20 |
| Message-ID: | CAHxsdf7okj=H0QQ70DrFpCKMkAJwqVsAvK+YJ1rY4QaKq80pMw@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-tr-genel |
Bence arkadaş bir yemeği hak etti :D
10 Eylül 2013 10:21 tarihinde N. Can KIRIK <can(at)epati(dot)com(dot)tr> yazdı:
> Faydam olduysa ne mutlu bana...
>
> İyi çalışmalar...
>
> *N. Can KIRIK
> ePati Bilişim Teknolojileri
> http://www.epati.com.tr/*
>
>
> 2013/9/10 Uygar UZUNHASAN <uygaruzunhasan(at)yahoo(dot)com>
>
>> Teşekkürler gerçekten ilaç gibi geldi. Anladım ki function ve aggregate
>> yazımına çalışmalıyım biraz.
>>
>> Uygar UZUNHASAN
>>
>>
>> ------------------------------
>> *Kimden:* N. Can KIRIK <can(at)epati(dot)com(dot)tr>
>> *Kime:* Uygar UZUNHASAN <uygaruzunhasan(at)yahoo(dot)com>
>> *Kopya:* "pgsql-tr-genel(at)postgresql(dot)org" <pgsql-tr-genel(at)postgresql(dot)org>
>> *Gönderildiği Tarih:* 9 Eylül 2013 16:16 Pazartesi
>> *Konu:* [pgsql-tr-genel] Re: [pgsql-tr-genel] kümülatif toplam sorgusu
>>
>> selam,
>>
>> çeşitli taklalar atarak çözümlenebilir ama şöyle daha kolay bir yöntem
>> var:
>>
>> madem SUM işimizi görmüyor, o zaman SUM yerine işimizi görecek bir
>> AGGREGATE hazırlayalım, adı ciciToplam olsun;
>>
>> önce AGGREGATE'in kendisine gelen her satır toplamı hazırlayacak
>> fonksiyonunu hazırlayalım: fn_ciciToplam,
>>
>> CREATE OR REPLACE FUNCTION public."fn_ciciToplam" ( NUMERIC, NUMERIC )
>> RETURNS NUMERIC LANGUAGE sql IMMUTABLE STRICT AS $$
>> SELECT GREATEST( 0, COALESCE( $1, 0 ) + COALESCE( $2, 0 ) );
>> $$;
>>
>>
>> fonksiyona gelen 2 parametre var, ilki state'i tuyuyor, yani şimdiye
>> kadar topladığı değerler. ikincisi de her bir satırda gelen değer.
>>
>>
>> fonksiyonu kullanarak bir AGGREGATE oluşturalım:
>>
>> CREATE AGGREGATE "ciciToplam" ( sfunc = "fn_ciciToplam", basetype =
>> NUMERIC, stype = NUMERIC );
>>
>>
>>
>>
>> şimdi de sorgumuzu çalıştıralım:
>>
>> WITH
>> "tablomuz" AS (
>> SELECT
>> GENERATE_SERIES( 1, ARRAY_LENGTH( a, 1 ) ) AS "id"
>> ,'x'::VARCHAR AS "tip"
>> ,UNNEST( a ) AS "miktar"
>> FROM
>> ( SELECT ARRAY[ 10, 20, -25, -25, 50, -40, 60 ] a ) a
>> )
>> SELECT
>> *
>> ,"ciciToplam"( "miktar" ) over "toplam"
>> FROM
>> "tablomuz" t
>> WINDOW
>> "toplam" AS ( PARTITION BY "tip" ORDER BY "id" );
>>
>>
>> kolay gelsin.
>>
>>
>> *N. Can KIRIK
>> ePati Bilişim Teknolojileri
>> http://www.epati.com.tr/*
>>
>>
>> 2013/9/9 Uygar UZUNHASAN <uygaruzunhasan(at)yahoo(dot)com>
>>
>> Merhabalar
>> Çözemediğim bir sorgu tipi var, altta bir özeneğini göstereyim.
>>
>> tablomuz:
>> id / tip/ miktar
>> 1 /x/ 10
>> 2 /x/ 20
>> 3 /x/ -25
>> 4 /x/ -25
>> 5 /x/ 50
>> 6 /x/ -40
>> 7 /x/ 60
>>
>> buradan alacağım sonuçta toplamlar hiç sıfırın altına düşmemeli ve ona
>> göre toplanarak gitmeli (olmasıGereken sütunu), ama yapabildiğim sadece
>> sıralı toplam alabilmek şöyleki:
>>
>> SELECT sum(miktar) over (PARTITION BY tip ORDER BY id) as kalan FROM
>> tablomuz;
>>
>> id /tip/ miktar/kalan/olmasıGereken
>> 1 /x/ 10 / 10 / 10
>> 2 /x/ 20 / 30 / 30
>> 3 /x/ -25 / -5 / -5
>> 4 /x/ -25 / -30 / 0
>> 5 /x/ 50 / 20 / 50
>> 6 /x/ -40 / -20 / 10
>> 7 /x/ 60 / 40 / 70
>>
>> Kısaca durumu şöyle özetleyim, pozitif miktarlar alınan siparişi, negatif
>> miktarlar ise teslimatı gösteriyor. Siparişten fazla yapılan teslimatlar,
>> eğer normal bir toplam çalıştırılırsak bir sonraki siparişten düşüyor,
>> halbuki sipariş verilirken önceden fazla gelmiş mallar göz önünde
>> bulundurularak yapılıyor.
>>
>>
>> Uygar UZUNHASAN
>>
>>
>>
>>
>>
>
--
Saygılarımla... Recep KIRMIZI
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Recep KIRMIZI | 2013-09-10 11:45:28 | Re: [pgsql-tr-genel] Re: Yan: [pgsql-tr-genel] Re: [pgsql-tr-genel] kümülatif toplam sorgusu |
| Previous Message | RecNes | 2013-09-10 11:10:48 | Postgresql server optimizasyonu için Türkçe dokümantasyon? |