Received: from localhost (maia-2.hub.org [200.46.204.187]) by postgresql.org (Postfix) with ESMTP id 05A369F9738 for ; Sat, 25 Aug 2007 19:43:07 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.187]) (amavisd-maia, port 10024) with ESMTP id 06251-04 for ; Sat, 25 Aug 2007 19:42:58 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.5 Received: from ns1.officenet.no (ns1.officenet.no [193.212.174.3]) by postgresql.org (Postfix) with ESMTP id 595769F969B for ; Sat, 25 Aug 2007 19:43:02 -0300 (ADT) Received: from [84.48.119.79] (helo=andreak-laptop.local) by ns1.officenet.no with esmtpsa (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from ) id 1IP4LI-0004je-6I for pgsql-sql@postgresql.org; Sun, 26 Aug 2007 00:42:59 +0200 From: Andreas Joseph Krogh Organization: OfficeNet AS To: pgsql-sql@postgresql.org Subject: Re: Returning array of IDs as a sub-query with group-by Date: Sun, 26 Aug 2007 00:42:56 +0200 User-Agent: KMail/1.9.6 References: <200708251710.57557.andreak@officenet.no> <200708251755.30291.andreak@officenet.no> <1188075739.12268.50.camel@localhost.localdomain> In-Reply-To: <1188075739.12268.50.camel@localhost.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Message-Id: <200708260042.56251.andreak@officenet.no> X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200708/206 X-Sequence-Number: 29144 On Saturday 25 August 2007 23:02:19 Ragnar wrote: > On lau, 2007-08-25 at 17:55 +0200, Andreas Joseph Krogh wrote: > > On Saturday 25 August 2007 17:10:57 Andreas Joseph Krogh wrote: > > [snip] > > > > count | item_id | price | item_id_array > > > -------+---------+-------+--------------- > > > 3 | 1 | 100 | {1,2,3} > > > 6 | 1 | 200 | {4,5,6,7,8,9} > > > 2 | 2 | 200 | {10,11} > > > > > > I tried this query which complains about an ungruoped column: > > > > > > SELECT COUNT(il.price), i.id AS item_id, il.price, > > > ARRAY(SELECT a.id FROM item_log a WHERE a.id =3D il.id) AS item_id_a= rray > > > FROM item i, item_log il WHERE i.id =3D il.item_id GROUP BY il.pric= e, > > > i.id; > > > > > > ERROR: subquery uses ungrouped column "il.id" from outer query > > > > > > Any hints? > > > > I found the following CREATE AGGREGATE suggestion in the PG-docs: > > [aggregate solution snipped] > > > If someone knows of a way without introducing a new AGGREGATE I'm still > > interrested. > > you can allways do the ARRAY(SELECT...) outside the grouping: > # select *,(select ARRAY( > SELECT a.id > FROM item_log as a > WHERE foo.item_id=3Da.item_id > AND foo.price=3Da.price > ) > ) AS item_id_array > from ( > select count(*),item_id, price > from item_log > group by item_id, price > ) as foo; > > count | item_id | price | item_id_array > -------+---------+-------+--------------- > 3 | 1 | 100 | {1,2,3} > 6 | 1 | 200 | {4,5,6,7,8,9} > 2 | 2 | 200 | {10,11} > (3 rows) > > > but i suspect the aggregate will perform better > > gnari Ok, thanks. =2D-=20 Andreas Joseph Krogh Senior Software Developer / Manager =2D-----------------------+---------------------------------------------+ OfficeNet AS | The most difficult thing in the world is to | Karenslyst All=C3=A9 11 | know how to do a thing and to watch | PO. Box 529 Sk=C3=B8yen | somebody else doing it wrong, without | 0214 Oslo | comment. | NORWAY | | Tlf: +47 24 15 38 90 | | =46ax: +47 24 15 38 91 | | Mobile: +47 909 56 963 | | =2D-----------------------+---------------------------------------------+