Re: how to create aggregate xml document in 8.3?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Matt Magoffin" <postgresql(dot)org(at)msqr(dot)us>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: how to create aggregate xml document in 8.3?
Date: 2007-12-11 17:59:52
Message-ID: 20231.1197395992@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

"Matt Magoffin" <postgresql(dot)org(at)msqr(dot)us> writes:
> Hello, I'm trying to write a query to return an XML document like
> <root foo="bar">
> <range range="x" count="123">
> <range range="y" count="345">
> ...
> </root>

Something like this:

regression=# select xmlelement(name root, xmlagg(x)) from
regression-# (select xmlelement(name range, xmlattributes(string4, count(*) as count)) as x from tenk1 group by string4) ss;
xmlelement
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
<root><range string4="OOOOxx" count="2500"/><range string4="AAAAxx" count="2500"/><range string4="HHHHxx" count="2500"/><range string4="VVVVxx" count="2500"/></root>
(1 row)

You need a subquery because your setup requires two levels of
aggregation: one to make the grouped counts, and then another one
for the xmlagg() (which is basically just text concatenation).

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Scott Marlowe 2007-12-11 18:00:00 Re: top posting (was: Hijack!)
Previous Message Stanislav Raskin 2007-12-11 17:48:15 Re: Understanding Aliases