Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL-将多行作为一行返回_Sql_Postgresql - Fatal编程技术网

PostgreSQL-将多行作为一行返回

PostgreSQL-将多行作为一行返回,sql,postgresql,Sql,Postgresql,我有一个返回两行的查询: SELECT * FROM ( SELECT cola,colb from table LIMIT 2 ) as f 结果是: cola, colb x, 1 y, 2 是否可以在顶层选择中使用结果?类似于: SELECT some_function(x,y), some_other_function(1,2) FROM ( SELECT cola,colb from table LIMIT 2 ) as f 以下是实际查询: SELECT * FRO

我有一个返回两行的查询:

SELECT * 
FROM (
  SELECT cola,colb from table LIMIT 2
) as f
结果是:

cola, colb
x, 1
y, 2
是否可以在顶层选择中使用结果?类似于:

SELECT some_function(x,y), some_other_function(1,2) 
FROM (
  SELECT cola,colb from table LIMIT 2
) as f
以下是实际查询:

SELECT *
FROM
(
    SELECT 
      alt, 
      st_distance_sphere(
        st_closestpoint(geom,st_setsrid(st_makepoint(x,y),4326)),
        st_setsrid(st_makepoint(x,y),4326)
      ) as d
    FROM table
) as foo
它返回:

alt | d
800 | 9.658
900 | 11.59
etc

您需要某种交叉制表来将多行聚合为一行

您的示例的工作原理如下:

SELECT some_function(arr_a[1], arr_a[2])
     , some_other_function(arr_b[1], arr_b[2]) 
FROM (
   SELECT array_agg(cola) AS arr_a
        , array_agg(colb) AS arr_b
   FROM   (
      SELECT cola, colb
      FROM   tbl
      ORDER  BY cola
      LIMIT  2
      ) sub1
   ) sub2;

有多种方法。取决于实际问题。

不能将子查询中检索到的值用作父查询中的字段名。SQL不是那样工作的。您可以检索这些值并从中生成新的查询,但没有自动执行您所需的操作的方法。我假设它类似于cola[0]等。我还没有在网上看到有关此的任何信息(可能我搜索的术语错误?),所以发到这里寻求帮助?嗯…x和y,1和2所属的ID是相同的吗?如果是这样的话,那么这可能需要一个枢轴解决方案。@JaazCole-他们没有(我想你是在问他们是否有钥匙?)。初始查询实际上是一个PostGIS空间计算,它使用传递给查询的数据,而不是表。