From: | Recep KIRMIZI <rkirmizi(at)gmail(dot)com> |
---|---|
To: | "N(dot) Can KIRIK" <can(at)epati(dot)com(dot)tr> |
Cc: | Sinan Duman <sinanduman(at)gmail(dot)com>, "pgsql-tr-genel(at)postgresql(dot)org" <pgsql-tr-genel(at)postgresql(dot)org> |
Subject: | Re: [pgsql-tr-genel] Re: [pgsql-tr-genel] array_agg kullanımı |
Date: | 2014-02-26 08:58:29 |
Message-ID: | CAHxsdf6swKDT5UtS=v7FG6ec-DNh0iBVx26UYK3UcfYyHn3T+Q@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-tr-genel |
Teşekkürler.
25 Şubat 2014 21:35 tarihinde N. Can KIRIK <can(at)epati(dot)com(dot)tr> yazdı:
> selam,
>
> array_agg kullanımında 9.2'den itibaren karşılaştığım bir anormal
> davranıştan bahsedeyim, ufak bir uyarı niteliğinde.
>
> grup sorgularında kayıtların birleştirilen satıra girme sıralamasının
> önemli olduğu durumlarda, birleştirme fonksiyonlarında mutlaka ORDER BY
> kullanmak gerekiyor.
>
> 9.2 öncesinde sıralama sorguya giriş sırasına göre sabit kalırken, 9.2'den
> itibaren sıralamalar her ifade için farklı olabiliyor. belgelendirmelerde
> ifade edilmeyen bu davranış değişikliği zamanında biraz saç baş yoldurmuştu
> bana.
>
> özellikle birden fazla ARRAY_AGG kullanımı söz konusu olduğunda mutlaka
> tüm ifadelerin aynı sıralamaya tabi olduğunu garantilemek gerekiyor.
>
> sorgunuzu şu şekilde revize etmenizi öneririm:
>
> SELECT
>> "product_id"
>> ,ARRAY_AGG( "updated_at" *ORDER BY* "updated_at" ) AS "updated"
>> ,ARRAY_AGG( "price" *ORDER BY* "updated_at" ) AS "prices"
>> FROM
>> "ebebek_productupdate"
>> GROUP BY
>> "product_id"
>> ;
>
>
>
>
> 2014-02-25 19:25 GMT+02:00 Recep KIRMIZI <rkirmizi(at)gmail(dot)com>:
>
> Tam istediğim degil ama doğru bakış açısını anladım (Hatalıysam düzeltin
>> lütfen). gruplanacak elemanı aggregation 'a sokmuyoruz. diğerlerini
>> sokuyoruz. Sizin yazdığınızı biraz değiştirdim çünkü tip 'e cast etmek ile
>> ilgili bir hata verdi.
>>
>> ebebek=# select updated_at, array_agg(product_id::text,',') from
>> ebebek_productupdate group by product_id;
>> ERROR: function array_agg(text, unknown) does not exist
>>
>> Şimdiki hali:
>>
>> ebebek=# select product_id, array_agg(updated_at) as updated,
>> array_agg(price) as prices from ebebek_productupdate group by product_id;
>> -[ RECORD 1
>> ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> product_id | 1
>> updated | {"2014-02-25 18:57:37.918435+02","2014-02-25
>> 18:55:53.858926+02","2014-02-25 18:53:24.424278+02","2014-02-25
>> 17:34:27.762801+02","2014-02-25 17:33:41.818229+02","2014-02-25
>> 17:33:34.807815+02"}
>> prices | {59.90,59.90,59.90,15.23,10.11,20.11}
>> -[ RECORD 2
>> ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> product_id | 2
>> updated | {"2014-02-25 18:57:37.942396+02","2014-02-25
>> 18:55:53.88388+02","2014-02-25 18:53:24.449021+02"}
>> prices | {59.90,59.90,59.90}
>> -[ RECORD 3
>> ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> product_id | 3
>> updated | {"2014-02-25 18:57:37.966292+02","2014-02-25
>> 18:55:53.907771+02","2014-02-25 18:53:24.473005+02"}
>> prices | {9.90,9.90,9.90}
>> -[ RECORD 4
>> ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> product_id | 4
>> updated | {"2014-02-25 18:57:37.990305+02","2014-02-25
>> 18:55:53.931796+02","2014-02-25 18:53:24.497069+02","2014-02-25
>> 17:34:37.01767+02"}
>> prices | {39.90,39.90,39.90,22.22}
>> -[ RECORD 5
>> ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> product_id | 5
>> updated | {"2014-02-25 18:57:38.01532+02","2014-02-25
>> 18:55:53.955814+02","2014-02-25 18:53:24.521036+02"}
>> prices | {27.99,27.99,27.99}
>>
>>
>> buradaki hali işimi görüyor. updated ve prices alanlarındaki elemanların
>> indisleride birbirini tutuyor. Yani 1. kayıt için updated[0] değeri ile
>> prices[0] değeri birbiri ile eşleşiyor.
>>
>> Teşekkürler.
>>
>> yani updated[0] =
>>
>>
>>
>>
>> 25 Şubat 2014 19:00 tarihinde Sinan Duman <sinanduman(at)gmail(dot)com> yazdı:
>>
>> select product_id, array_agg(updated_at::text,',') from
>>> ebebek_productupdate group by product_id;
>>>
>>> 25 Şub 2014 tarihinde 18:44 saatinde, Recep KIRMIZI <rkirmizi(at)gmail(dot)com>
>>> şunları yazdı:
>>>
>>> > Merhabalar;
>>> > Aşağıda ki gibi bir tablom var,
>>> >
>>> > ebebek=# SELECT * from ebebek_productupdate;
>>> > id | product_id | price | updated_at
>>> > ----+------------+-------+-------------------------------
>>> > 1 | 1 | 20.11 | 2014-02-25 17:33:34.807815+02
>>> > 2 | 1 | 10.11 | 2014-02-25 17:33:41.818229+02
>>> > 3 | 1 | 15.23 | 2014-02-25 17:34:27.762801+02
>>> > 4 | 4 | 22.22 | 2014-02-25 17:34:37.01767+02
>>> > (4 rows)
>>> >
>>> >
>>> > ben bu ürünleri product_id 'ye göre gruplamak ve her bir product_id
>>> için tek satır olacak şekilde görmek istiyorum. Yani ilk 3 satır benim için
>>> tek satır olmalı.
>>> >
>>> > Amaç ürünün farklı zamanlardaki fiyat güncellemelerini, aynı satırda,
>>> tarih ve fiyatları ile birlikte gösterebilmek.
>>> >
>>> > Gruplama işini id 'ye göre yapıyor ama bu bana istediğim sonucu
>>> döndürmüyor:
>>> >
>>> > ebebek=# select array_agg(product_id) as pids, price, updated_at from
>>> ebebek_productupdate group by id;
>>> > pids | price | updated_at
>>> > ------+-------+-------------------------------
>>> > {1} | 20.11 | 2014-02-25 17:33:34.807815+02
>>> > {1} | 10.11 | 2014-02-25 17:33:41.818229+02
>>> > {1} | 15.23 | 2014-02-25 17:34:27.762801+02
>>> > {4} | 22.22 | 2014-02-25 17:34:37.01767+02
>>> > (4 rows)
>>> >
>>> > ebebek=# select array_agg(product_id) as pids, price, updated_at from
>>> ebebek_productupdate group by pids;
>>> > ERROR: aggregates not allowed in GROUP BY clause
>>> > LINE 1: select array_agg(product_id) as pids, price, updated_at from...
>>> >
>>> >
>>> > Vel hasılı aggregate yaptığım sütuna göre gruplamak istiyorum. Zaten
>>> aggregate yapmamdaki amaç ta bu. Lakin konuya hakim değilim.
>>> >
>>> > Tavsiyesi olan?
>>> >
>>> >
>>> > --
>>> > Saygılarımla... Recep KIRMIZI
>>>
>>
>>
>>
>> --
>> Saygılarımla... Recep KIRMIZI
>>
>
>
--
Saygılarımla... Recep KIRMIZI
From | Date | Subject | |
---|---|---|---|
Next Message | Uygar UZUNHASAN | 2014-03-11 23:10:15 | Çoklu dil desteği |
Previous Message | N. Can KIRIK | 2014-02-25 19:35:24 | Re: [pgsql-tr-genel] Re: [pgsql-tr-genel] array_agg kullanımı |