2016-05-29 119 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 –