Tre*_*ung 5 sql arrays postgresql composite-types postgresql-9.2
我有一个问题,我正在努力.以下是显示问题的简化查询:
WITH the_table AS (
SELECT a, b
FROM (VALUES('data1', 2), ('data3', 4), ('data5', 6)) x (a, b)
), my_data AS (
SELECT 'data7' AS c, array_agg(ROW(a, b)) AS d
FROM the_table
)
SELECT c, d[array_upper(d, 1)]
FROM my_data
Run Code Online (Sandbox Code Playgroud)
在我的数据部分中,您会注意到我正在从多行创建一个数组,并且该数组与其他数据一起返回.该阵列需要同时包含的信息a和b,并保持连接在一起的两个值.看起来有意义的是使用匿名行或记录(我想避免实际创建复合类型).
这一切都很好,直到我需要开始拉回数据.在上面的例子中,我需要访问数组中的最后一个条目,这可以通过使用来轻松完成array_upper,但后来我需要访问以前的b列中的值,我无法弄清楚该怎么做.
基本上,现在上面的查询返回:
"data7";"(data5,6)"
Run Code Online (Sandbox Code Playgroud)
我需要回来
"data7";6
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
注意:虽然在上面的例子中我使用文本和整数作为我的数据的类型,但它们不是实际的最终类型,而是用于简化示例.
注意:这是使用PostgreSQL 9.2
编辑:为了澄清,有些事情SELECT 'data7', 6不是我想要的.想象一下,为了方便起见,the_table实际上是从数据库表中提取而不是我输入的WITH语句,我不知道表中有哪些数据.
换句话说,我希望能够做到这样的事情:
SELECT c, (d[array_upper(d, 1)]).b
FROM my_data
Run Code Online (Sandbox Code Playgroud)
得到这个:
"data7";6
Run Code Online (Sandbox Code Playgroud)
基本上,一旦我通过使用row()函数将某些内容放入匿名记录中,我该如何将其取回?如何拆分'data5'零件和6零件,使它们不会同时返回一列?
再举一个例子:
SELECT ROW('data5', 6)
Run Code Online (Sandbox Code Playgroud)
使'data5'和6在一列中返回.如何将这一列拆分为原来的两列?
我希望澄清一下
如果您可以安装hstore扩展:
with the_table as (
select a, b
from (values('data1', 2), ('data3', 4), ('data5', 6)) x (a, b)
), my_data as (
select 'data7' as c, array_agg(row(a, b)) as d
from the_table
)
select c, (avals(hstore(d[array_upper(d, 1)])))[2]
from my_data
;
c | avals
-------+-------
data7 | 6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |