我正在尝试通过WITH
存储查询的结果,然后将其结果用于另一个查询,如下所示:
WITH results AS (
SELECT
date,
value
FROM fruits
WHERE fruit_name = 'apple'
LIMIT 1
)
SELECT
date,
quantity,
CASE
WHEN fruits.date < results.date THEN fruits.quantity * results.value
ELSE 0
END AS "valueColumn"
FROM fruits;
我正在尝试在此查询中生成一个名为valueColumn
的新列。但是要这样做,我需要使用results
中的信息。
上面编写的查询给我一个missing FROM-clause entry for table "results"
错误。在查询中如何使用results
中的信息?
答案 0 :(得分:1)
results
就像一张桌子。您必须将其包含在FROM
子句中才能使用。在这种情况下,它只有一行,因此CROSS JOIN
就足够了:
WITH results AS (
SELECT date, value
FROM fruits
WHERE fruit_name = 'apple'
LIMIT 1
)
SELECT f.date, f.quantity,
(CASE WHEN f.date < r.date THEN f.quantity * r.value
ELSE 0
END) AS "valueColumn"
FROM fruits f CROSS JOIN
results r;
我认为您的问题专门针对CTE。有更简单的方法来表达此查询。例如,您可以使用窗口功能。假设'apple'
有一行:
SELECT f.date, f.quantity,
(CASE WHEN f.date < MAX(f.date) FILTER (WHERE f.fruit_name = 'apple') OVER ()
THEN f.quantity * MAX(f.value) FILTER (WHERE f.fruit_name = 'apple') OVER ()
ELSE 0
END) AS "valueColumn"
FROM fruits f