Re: array_agg and partition sorts

Поиск
Список
Период
Сортировка
От Rory Campbell-Lange
Тема Re: array_agg and partition sorts
Дата
Msg-id 20130626151855.GA5908@erota.net
обсуждение исходный текст
Ответ на array_agg and partition sorts  (Rory Campbell-Lange <rory@campbell-lange.net>)
Список pgsql-general
On 26/06/13, Rory Campbell-Lange (rory@campbell-lange.net) wrote:
> I'm on Postgres 9.1 and I've come across an issue which shows I don't
> understand partition sorting:
> Returns:
>
>     -[ RECORD 1 ]---------------------------------------------------------------------------------
>     agg1       | {Canberra,Vienna,Baku,Nassau,Dhaka,Porto-Novo,Thimphu,Brasilia,Sofia,Ouagadougou}
>     agg2       | {Nassau,Ouagadougou,Sofia,Brasilia,Thimphu,Porto-Novo,Dhaka,Baku,Vienna,Canberra}
>     agg3       | {Canberra}
>     row_number | 1
>     -[ RECORD 2 ]---------------------------------------------------------------------------------
>     agg1       | {Bridgetown,Minsk,Brussels,Belmopan,Gaborone}
>     agg2       | {Gaborone,Belmopan,Brussels,Minsk,Bridgetown}
>     agg3       | {Bridgetown}
>     row_number | 1

I've solved this by reading the docs at
http://www.postgresql.org/docs/9.1/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS
more carefully, particulary about how sorts affect the frame.

select * from (
        select
                array_agg(t_name) over (partition by n_group) as agg1
                , array_agg(t_name) over (partition by n_group order by t_additional desc
                                  range between unbounded preceding and unbounded following) as agg2
                , array_agg(t_name) over (partition by n_group order by t_additional asc
                                  range between unbounded preceding and unbounded following) as agg3
                , row_number() over (partition by n_group)
        from test
    ) x;

produces the desired result:

...
    -[ RECORD 10 ]--------------------------------------------------------------------------------
    agg1       | {Canberra,Vienna,Baku,Nassau,Dhaka,Porto-Novo,Thimphu,Brasilia,Sofia,Ouagadougou}
    agg2       | {Nassau,Ouagadougou,Sofia,Brasilia,Thimphu,Porto-Novo,Dhaka,Baku,Vienna,Canberra}
    agg3       | {Canberra,Vienna,Baku,Dhaka,Porto-Novo,Thimphu,Brasilia,Sofia,Ouagadougou,Nassau}
    row_number | 4
    -[ RECORD 11 ]--------------------------------------------------------------------------------
    agg1       | {Bridgetown,Minsk,Brussels,Belmopan,Gaborone}
    agg2       | {Gaborone,Belmopan,Brussels,Minsk,Bridgetown}
    agg3       | {Bridgetown,Minsk,Brussels,Belmopan,Gaborone}
    row_number | 1


--
Rory Campbell-Lange
rory@campbell-lange.net


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

Предыдущее
От: Karsten Hilbert
Дата:
Сообщение: Re: Semi-Pseudo Data Types & Procedure Arguments
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Semi-Pseudo Data Types & Procedure Arguments