查询WITH子句错误

时间:2018-06-20 01:49:11

标签: sql postgresql

以下查询产生了“关系临时表不存在”错误。您对弄清楚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

2 个答案:

答案 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);
相关问题