2016-05-29 118 views
1

中扣除,我要讓這樣的減法:Postgres的 - 兩個查詢

SELECT 
    (SELECT ST_Y(ST_Centroid(ST_Collect(column1))) AS distance_km 
    FROM table1) - 
    (SELECT ST_Y(ST_Transform(column1,4326)) AS distance_km 
    FROM table1) AS Difference 

ST_Y(ST_Centroid(ST_Collect(column1)))只有一個行ST_Y(ST_Transform(column1,4326))具有多行。我想通過列減去多行,並查看每個多行的結果。有了這個查詢,我得到:

ERROR: more than one row returned by a subquery used as an expression

任何幫助嗎?

+0

請舉個例子。你是否在暗示,如果你從第一個查詢得到'10',而從第二個查詢得到'{1,2,5,7}',你想要結果'{9,8,5,3}'? – MatBailie

+0

與'SELECT(SELECT 1 UNION SELECT 2);'相同。你不能用SQL來做這件事! –

+0

@MikeT - 「你」不能使用Op使用的語法,正確。但是,根據操作系統的實際***功能***要求,SQL最有可能*能夠使用正確的語法對其進行全面填充。 – MatBailie

回答

2

以下查詢將針對多行結果集加入一行結果集,並允許對它們進行比較。

SELECT 
    a.*, 
    b.*, 
    a.distance_km - b.distance_kn AS difference 
FROM 
(
    SELECT ST_Y(ST_Centroid(ST_Collect(column1))) AS distance_km FROM table1 
) 
    a 
CROSS JOIN 
(
    SELECT ST_Y(ST_Transform(column1,4326)) AS distance_km FROM table1 
) 
    b 
+0

@PRVS - 子查詢和'CROSS JOIN'是ANSI-SQL。所以,是的,它在PostGreSQL中起作用。 – MatBailie

+0

它的工作原理!非常感謝! – PRVS

+0

@MatBailie:名稱是拼寫PostgreSQL或Postgres。從來沒有一個首都G –