sql - 如何选择整数和数组元素?
问题描述
我可以将“col3”中的重复值选择到一个数组中,并使用以下命令按“col1”、“col2”排列它们:
select "col1", "col2", array_agg("col3" order by "col1", "col2") as myArray FROM
myTable group by "col1", "col2"
接下来,我想选择数组的前两个元素(因此它们出现在自己的列中)并通过执行以下操作继续排列它们“col1”、“col2”:
select "col1", "col2", element[1], element[2] from
(select "col1", "col2", array_agg("col3" order by "col1", "col2") as myArray FROM
myTable group by "col1", "col2") as vv(element)
但是,我收到以下错误:
ERROR: cannot subscript type integer because it is not an array
有没有办法转换“col1”和“col2”的整数值,以便我可以将数组元素放入由“col1”和“col2”组织的单独列中?
解决方案
您的表别名vv(element)
错误,因为内部查询有 3 列,而不仅仅是 1 列。通过仅指定一列,您只需重命名第一列(col1
to element
),而其他两列保留其原始名称来自内部查询。
因此,您的别名需要为所有三列提供名称:
select "col1", "col2", element[1], element[2]
from (
select "col1", "col2", array_agg("col3" order by "col1", "col2") as myArray
FROM myTable
group by "col1", "col2"
) as vv(co1, col2, element);
vv(co1, col2, element)
本质上重命名myarray
为element
.
由于内部查询中的所有列都有正确的名称,因此您实际上不需要表别名中的列别名:
select "col1", "col2", myarray[1] as element_one, myarray[2] as element_two
from (
select "col1", "col2", array_agg("col3" order by "col1", "col2") as myArray
FROM myTable
group by "col1", "col2"
) as vv;
推荐阅读
- r - 从 Reddit 抓取,参数的列数不匹配
- winapi - 如何为资源加载 16 位可执行文件 (NE)?
- huawei-mobile-services - 如何在没有谷歌的情况下快速获取 GPS 位置更新 fusedLocationClient
- javascript - 如何从 React 网站计算用户的 CPU 使用百分比?
- javascript - js中对多维数组进行过滤和排序
- arrays - 如何清除数组并用零填充?
- c# - XML 反序列化带回空列表
- r - 合并表列表而不更改标签顺序
- reactjs - React 表排序和搜索
- javascript - 如何使用相同的过滤器过滤数组和子数组项