2014-08-28 72 views
0

我有一個返回兩行的查詢: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 * 
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 
+1

不能將在子查詢中檢索到的值用作父查詢中的字段名。 SQL不能這樣工作。你可以檢索這些值並從它們中建立一個新的查詢,但是沒有自動的方法來做你想要的。 – 2014-08-28 18:02:05

+0

我認爲這是類似於可樂[0]等。我一直沒有看到任何關於這個在線(也許我正在尋找錯誤的術語?)所以張貼在這裏尋找幫助...? – Matt 2014-08-28 18:03:19

+1

嗯... x和y,1和2屬於相同的ID嗎?如果是這樣,那麼這可能可以通過樞紐解決方案來完成。 – 2014-08-28 18:10:35

回答

1

你需要某種交叉表的聚集多行成一個。

你的例子就是這樣工作的:

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; 

有不同的方法。取決於你的實際的問題。