Re: Picking the first of an order in an aggregate query

Поиск
Список
Период
Сортировка
От Robert James
Тема Re: Picking the first of an order in an aggregate query
Дата
Msg-id CAGYyBgjxJ1KpaMn6Gg+ND9=A7GkrCTR-gzGUkGiFJiNzrMfy9Q@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Picking the first of an order in an aggregate query  (François Beausoleil <francois@teksol.info>)
Ответы Re: Picking the first of an order in an aggregate query  (Vincent Veyron <vv.lists@wanadoo.fr>)
Список pgsql-general
On 12/31/12, François Beausoleil <francois@teksol.info> wrote:
>
> Le 2012-12-31 à 15:38, Robert James a écrit :
>
>> DISTINCT is a very simple solution!
>> But I have one problem: In addition to the FIRST fields, I also do
>> want some aggregate functions.  More accurately, it would be:
>>
>> SELECT grouping_field, FIRST(field_a), FIRST(field_b), SUM(field_x),
>> MAX(field_y)
>> ...
>>
>> How should I do that? Should I do two queries with a join on the
>> grouping field? Or is there a more direct way?
>
> WINDOW functions can help you:
>
> SELECT
>     grouping_field
>   , first_value(field_a) OVER (ORDER BY ...)
>   , first_value(field_b) OVER (ORDER BY ...)
>   , sum(field_x) OVER ()
>   , max(field_y) OVER ()
> FROM ...
>
> The empty OVER clauses will make the sum / max work over the full result
> set, and not a subset. I really recommend reading the window functions
> section on the site.
>

I see.  Will the optimizer know enough to not repeat the work for each
first_value I do? Or am I better off using a JOIN of some sort?


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

Предыдущее
От: Philipp Kraus
Дата:
Сообщение: Re: rights for schema
Следующее
От: Marko Tiikkaja
Дата:
Сообщение: Recovering from an exception