首页 > 解决方案 > 如何将不同表条目的数组合并在一起?

问题描述

我有一张表格可以跟踪不同日期的价格变化:

| 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} |

我怎样才能做到这一点?在我看来,挑战在于创建一个新数组或将值附加到现有数组。

标签: sqlarrayspostgresqlaggregate-functionsunnest

解决方案


您可以使用正确的顺序取消嵌套和重新聚合:

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)

一个(可能)重要的事情是跟踪原始数组中每个元素的位置,然后我们可以在聚合时将其用作二级排序标准。


推荐阅读