如何将不同 table 条目的数组合并在一起?
How to merge arrays of different table entries together?
我有一个 table 可以跟踪不同日期的价格变化:
| ID | price | date |
|----|-----------------|------------|
| 1 | {118, 123, 144} | 2020/12/05 |
| 2 | {222, 333, 231} | 2020/12/06 |
| 3 | {99, 55, 33} | 2020/12/07 |
我想检索按日期排序的单个数组中的所有价格,这样我会得到这样的结果:
| ID | price |
|----|------------------------------------|
| 1 | {118,123,144,222,333,231,99,55,33} |
我怎样才能做到这一点?在我看来,挑战在于创建一个新数组或将值附加到现有数组。
您可以取消嵌套并使用正确的顺序重新聚合:
select array_agg(x.val order by t.date, x.rn) as all_prices
from mytable t
cross join lateral unnest(t.price) with ordinality as x(val, rn)
一件(可能)重要的事情是跟踪每个元素在原始数组中的位置,然后我们可以在聚合时将其用作二级排序标准。
我有一个 table 可以跟踪不同日期的价格变化:
| ID | price | date |
|----|-----------------|------------|
| 1 | {118, 123, 144} | 2020/12/05 |
| 2 | {222, 333, 231} | 2020/12/06 |
| 3 | {99, 55, 33} | 2020/12/07 |
我想检索按日期排序的单个数组中的所有价格,这样我会得到这样的结果:
| ID | price |
|----|------------------------------------|
| 1 | {118,123,144,222,333,231,99,55,33} |
我怎样才能做到这一点?在我看来,挑战在于创建一个新数组或将值附加到现有数组。
您可以取消嵌套并使用正确的顺序重新聚合:
select array_agg(x.val order by t.date, x.rn) as all_prices
from mytable t
cross join lateral unnest(t.price) with ordinality as x(val, rn)
一件(可能)重要的事情是跟踪每个元素在原始数组中的位置,然后我们可以在聚合时将其用作二级排序标准。