gpt4 book ai didi

sql - PostgreSQL:如何访问匿名记录上的列

转载 作者:行者123 更新时间:2023-11-29 11:30:03 26 4
gpt4 key购买 nike

我有一个正在处理的问题。下面是一个显示问题的简化查询:

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

在我的数据部分,您会注意到我正在从多行创建一个数组,并且该数组与其他数据在一行中返回。此数组需要包含 ab 的信息,并将两个值链接在一起。似乎有意义的是使用匿名行或记录(我想避免实际创建复合类型)。

这一切都很好,直到我需要开始提取数据。在上面的例子中,我需要访问数组中的最后一个条目,这可以通过使用 array_upper 轻松完成,但是我需要访问曾经是 b< 的值 列,我不知道该怎么做。

基本上,现在上面的查询正在返回:

"data7";"(data5,6)"

我要回去了

"data7";6

我该怎么做?

注意:虽然在上面的示例中我使用文本和整数作为我的数据类型,但它们并不是实际的最终类型,而是用于简化示例。

注意:这是使用 PostgreSQL 9.2

编辑:为了澄清,像 SELECT 'data7', 6 这样的东西不是我想要的。想象一下,the_table 实际上是从数据库表中提取的,而不是我为了方便而放入的 WITH 语句,而且我不太清楚表中有什么数据。

换句话说,我希望能够做这样的事情:

SELECT c, (d[array_upper(d, 1)]).b
FROM my_data

然后取回:

"data7";6

基本上,一旦我使用 row() 函数将某些内容放入匿名记录中,我该如何将其取回?如何拆分 'data5' 部分和 6 部分,以便它们不会同时在一列中返回?

再举个例子:

SELECT ROW('data5', 6)

使“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

关于sql - PostgreSQL:如何访问匿名记录上的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com