| 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:45:28 |
| Message-ID: | CAHxsdf6N9Nnyv1-67-t-cFMAiMC-NgGe7mHKrRTPKp=JTL8jMQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-tr-genel |
Yanlış anlaşılma olmasın, bu bilgi tabi ki bir yemekten çok daha değerli
ama bilgi paylaşımının artması açısından teşvik edici olabilir :D
10 Eylül 2013 14:44 tarihinde Recep KIRMIZI <rkirmizi(at)gmail(dot)com> yazdı:
> 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
>
--
Saygılarımla... Recep KIRMIZI
| From | Date | Subject | |
|---|---|---|---|
| Next Message | N. Can KIRIK | 2013-09-14 10:25:22 | Re: [pgsql-tr-genel] Re: Yan: [pgsql-tr-genel] Re: [pgsql-tr-genel] kümülatif toplam sorgusu |
| Previous Message | Recep KIRMIZI | 2013-09-10 11:44:20 | Re: [pgsql-tr-genel] Re: Yan: [pgsql-tr-genel] Re: [pgsql-tr-genel] kümülatif toplam sorgusu |