Wishlist: subqueries that return multiple columns

Поиск
Список
Период
Сортировка
От Greg Stark
Тема Wishlist: subqueries that return multiple columns
Дата
Msg-id 87ekihzn7g.fsf@stark.xeocode.com
обсуждение исходный текст
Ответы Re: Wishlist: subqueries that return multiple columns  (Philippe Schmid <phschmid@cadinfo.ch>)
Список pgsql-hackers
I've several times wanted a way to add multiple select output columns using a
single expression. A typical scenario would be if the columns come from a
subselect from another table where repeating the subselect means slow
performance as well as awkward and repetitive code.

Sometimes the subselect can be rewritten as a join, but that is not always the
case. Consider something like:

select customer.*,      (select avg(amount),sum(amount) from purchases         where purchases.customer_id =
customer.customer_id     ) as (avg_purchase, total_purchase),      (select avg(amount),sum(amount) from quotes
wherequotes.customer_id = customer.customer_id      ) as (avg_quote, total_quote) from customer
 

(Ok, actually that could be done as a join using some trickery with GROUP BY,
but I have other scenarios where it can't because the subselects overlap.)

With the new support for complex data types like arrays and structures perhaps
I could do this by constructing a RECORD in each subselect and then wrapping
another layer around the query where I explicitly list each element of the
RECORD that I want to include in the result set.

But it would be nice to have some more convenient mechanisms for handling this
case.

-- 
greg



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Thomas Hallgren
Дата:
Сообщение: Re: Intermittent bug
Следующее
От: Philippe Schmid
Дата:
Сообщение: Re: Wishlist: subqueries that return multiple columns