【问题标题】:How can I select integers and array elements?如何选择整数和数组元素?
【发布时间】:2019-12-12 10:50:45
【问题描述】:

我可以将“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”组织的单独列中?

【问题讨论】:

    标签: sql arrays postgresql alias


    【解决方案1】:

    您的表别名 vv(element) 错误,因为内部查询有 3 列,而不仅仅是 1 列。通过仅指定一列,您只需将第一列重命名(col1element),而其他两列保留内部查询的原始名称。

    所以您的别名需要为所有三列提供名称:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多