我有一个像这样构造的表:
oid | identifier | value 1 | 10 | 101 2 | 10 | 102 3 | 20 | 201 4 | 20 | 202 5 | 20 | 203
我想查询此表以得到这样的结果:
identifier | values[] 10 | {101, 102} 20 | {201, 202, 203}
我想不出办法。那可能吗 ?如何 ?
非常感谢你。
这是Postgres内置的,因为有几个版本,因此您不再需要定义自己的名称,名称为array_agg()。
array_agg()
test=> select array_agg(n) from generate_series(1,10) n group by n%2; array_agg -------------- {1,3,5,7,9} {2,4,6,8,10}
(这是Postgres 8.4.8)。
请注意,未ORDER BY指定no ,因此结果行的顺序取决于所使用的分组方法(此处为哈希),即未定义。例子:
ORDER BY
test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2); ?column? | array_agg ----------+-------------- 1 | {1,3,5,7,9} 0 | {2,4,6,8,10} test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT; text | array_agg ------+-------------- 0 | {2,4,6,8,10} 1 | {1,3,5,7,9}
现在,我不知道为什么会收到{10,2,4,6,8}和{9,7,3,1,5},因为generate_series()应该按顺序发送行。
{10,2,4,6,8}
{9,7,3,1,5}
generate_series()