我想在列上调用一次聚合函数(成本),并通过自左连接(用于创建行的排列或组合)将其级联。这样我认为成本是 O(n) 并在连接 O(row^joins) 之后调用它。从这样的事情开始:
id | cost
----------
1 | 5
2 | 10
我想做类似下面的事情。我可以通过选择一个临时表并加入它来做类似的事情,但是我想避免使用临时表...
CREATE TEMP TABLE tmp_750309_plans AS (SELECT *, cost(id) as cost FROM plans WHERE plans.id IN (1,2,...));
SELECT * FROM tmp_750309_plans AS t1 LEFT JOIN tmp_750309_plans AS t2 ON ...
我更愿意做这样的事情:
SELECT id, cost(id) as cost FROM plans AS t1
LEFT JOIN t1 AS t2
ON t1.id != t2.id
AND ...
要得到这样的东西:
id | cost | id | cost |
-----------------------
1 | 5 |NULL| NULL |
2 | 10 |3 | 15 |
如有任何帮助,我们将不胜感激。
最佳答案
无需创建临时表,只需将您的 SELECT 设为派生表即可:
SELECT * FROM ( SELECT *, cost(id) as cost FROM plans WHERE plans.id IN (1,2,...) ) tmp AS t1 LEFT JOIN tmp AS t2 ON ...
或具有通用表表达式的替代解决方案(适用于 PostgreSQL 8.4 及更高版本)
with tmp as ( SELECT *, cost(id) as cost FROM plans WHERE plans.id IN (1,2,...) ) SELECT * FROM tmp as T1 LEFT JOIN tmp AS t2 ON ...
关于sql - 通过自左连接传递聚合函数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273909/