以下查询产生了“关系临时表不存在”错误。您对弄清楚WITH子句如何工作的帮助将非常有用。我们正在运行PostgreSQL 8.0.2。谢谢!
WITH tempTable AS (
SELECT AVG(subtotal_price) AS AverageValue
FROM orders
)
SELECT subtotal_price
FROM orders
WHERE orders.subtotal_price > tempTable.AverageValue
答案 0 :(得分:4)
您应该在CTE上使用子查询来获取平均值:
WITH tempTable AS
(
SELECT AVG(subtotal_price) AS AverageValue
FROM orders
)
SELECT subtotal_price
FROM orders
WHERE subtotal_price > (SELECT AverageValue FROM tempTable);
但是,这是使用AVG
作为分析函数的另一种方法:
SELECT subtotal_price
FROM
(
SELECT subtotal_price, AVG(subtotal_price) OVER () AverageValue
FROM orders
) t
WHERE subtotal_price > AverageValue;
答案 1 :(得分:2)
CTE的行为就像查询中的表或视图一样。您需要在FROM
子句中引用它:
WITH tempTable AS (
SELECT avg(subtotal_price) as AverageValue
FROM orders
)
SELECT subtotal_price
FROM orders
WHERE orders.subtotal_price > (SELECT tt.AverageValue FROM tempTable tt);