I'm on Postgres 9.1 and I've come across an issue which shows I don't
understand partition sorting:
Given a table like this:
select * from test;
n_group | t_name | t_additional
---------+-------------+--------------
1 | Canberra | Australia
1 | Vienna | Austria
1 | Baku | Azerbaijan
1 | Nassau | The Bahamas
1 | Dhaka | Bangladesh
1 | Porto-Novo | Benin
1 | Thimphu | Bhutan
1 | Brasilia | Brazil
1 | Sofia | Bulgaria
1 | Ouagadougou | Burkina Faso
2 | Bridgetown | Barbados
2 | Minsk | Belarus
2 | Brussels | Belgium
2 | Belmopan | Belize
2 | Gaborone | Botswana
Running this query:
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) as agg2
, array_agg(t_name) over (partition by n_group order by t_additional asc) as agg3
, row_number() over (partition by n_group)
from test
) x
where
x.row_number = 1;
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 don't understand why agg3 is missing values.
--
Rory Campbell-Lange
rory@campbell-lange.net