【发布时间】:2021-10-12 04:36:26
【问题描述】:
假设我有一个表 A,其中包含 a、b、c、d 列和一个查询:
SELECT
A.a + A.b AS sum,
A.c - A.d AS 差
FROM A
有没有办法在查询中定义一个新列,如sum * difference AS product? (使用我定义的名称)
【问题讨论】:
标签: sql postgresql
假设我有一个表 A,其中包含 a、b、c、d 列和一个查询:
SELECT
A.a + A.b AS sum,
A.c - A.d AS 差
FROM A
有没有办法在查询中定义一个新列,如sum * difference AS product? (使用我定义的名称)
【问题讨论】:
标签: sql postgresql
你可以尝试with子句
with precalculations as (
SELECT
A.a + A.b AS sum,
A.c - A.d AS difference
FROM A
)
select pr.sum, pr.difference, pr.sum * pr.difference as product from precalculations pr
【讨论】:
您可以通过以下方式之一做到这一点:
如果等式不是那么复杂,我建议使用第三个选项。
【讨论】:
解决此问题的“典型”方法使用 CTE 或子查询。但是,您也可以使用横向连接定义 FROM 子句中的表达式:
SELECT v.the_sum, v.the_difference,
v.the_sum * v.the_difference as the_product
FROM A CROSS JOIN LATERAL
(VALUES (A.a + A.b, A.c - A.d)
) v(the_sum, the_difference)
【讨论】: