Received: from maia.hub.org (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id C285363315A for ; Tue, 15 Sep 2009 04:50:08 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 18078-10 for ; Tue, 15 Sep 2009 07:50:00 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.17.10]) by mail.postgresql.org (Postfix) with ESMTP id E6A646333C6 for ; Tue, 15 Sep 2009 04:50:00 -0300 (ADT) Received: from webserv.wug.de ([194.25.154.138]) by mrelayeu.kundenserver.de (node=mrbap0) with ESMTP (Nemesis) id 0MKsym-1MnSnV3rsY-000PYN; Tue, 15 Sep 2009 09:49:58 +0200 Received: from kretschmer by webserv.wug.de with local (Exim 3.36 #1) id 1MnSnV-00050X-00 for pgsql-sql@postgresql.org; Tue, 15 Sep 2009 09:49:57 +0200 Date: Tue, 15 Sep 2009 09:49:57 +0200 From: "A. Kretschmer" To: pgsql-sql@postgresql.org Subject: Re: ordered by join? ranked aggregate? how to? Message-ID: <20090915074957.GA8046@a-kretschmer.de> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-OS: Debian/GNU Linux - weil ich es mir Wert bin! User-Agent: Mutt/1.5.9i X-Provags-ID: V01U2FsdGVkX1+YN5rbnRntze6Jo2JAPP/L9TKeu9USqnGv01M 1IwJ6Ryfp0Bb6Q1OQk1K95LSeYfNIvPbx6dYSnX/n8dEosbPP/ CQMnAXjxKotKBE8z0Du1w== X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-2.599 tagged_above=-10 required=5 tests=BAYES_00=-2.599 X-Spam-Level: X-Archive-Number: 200909/63 X-Sequence-Number: 33128 In response to wstrzalka : > What I need is to join 2 tables > > CREATE TABLE master( > id INT4 > ); > > > CREATE TABLE slave ( > master_id INT4, > rank INT4, > value TEXT); > > > What I need is to make the query: > > SELECT m.id, array_agg(s.value) AS my_problematic_array > FROM master AS m LEFT JOIN slave AS s ON (m.id = s.master_id) > GROUP BY m.id; > > return the 'my_problematic_array' in order specified by slave.rank > > As you probably can guest I don't have any idea know how to do it :/ test=*# select * from master; id ---- 1 2 (2 rows) test=*# select * from slave; master_id | rank | value -----------+------+------- 1 | 5 | 5 1 | 3 | 3 1 | 7 | 7 (3 rows) test=*# select id, array_agg(unnest) from ( select id, unnest(my_problematic_array) from ( SELECT m.id, array_agg(s.value) AS my_problematic_array FROM master AS m LEFT JOIN slave AS s ON (m.id = s.master_id) GROUP BY m.id ) foo order by 1,2 ) bar group by 1; id | array_agg ----+----------- 1 | {3,5,7} 2 | {NULL} (2 rows) Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)