PostgreSQL中如何在SELECT查询中为两列赋相同值且避免重复计算
在PostgreSQL中避免重复编写运算逻辑的方法(无需CTE)
针对你的需求,有几种实用方式可以实现,不用重复编写x + 2(或复杂运算)的逻辑:
方法1:用FROM子句的子查询提前计算
把复杂运算放在子查询中算出结果,主查询直接引用这个预计算的列即可:
SELECT calc_val AS d, calc_val AS e FROM ( SELECT x + 2 AS calc_val FROM y ) sub_query;
如果原表y还有其他需要保留的列,只需在子查询里一并选中:
SELECT other_col1, other_col2, calc_val AS d, calc_val AS e FROM ( SELECT other_col1, other_col2, x + 2 AS calc_val FROM y ) sub_query;
方法2:使用LATERAL子查询
LATERAL子查询允许你引用主查询表的列,适合需要保留原表所有列,同时添加重复计算列的场景:
SELECT y.*, calc_val AS d, calc_val AS e FROM y, LATERAL (SELECT x + 2 AS calc_val) calc_sub;
这种写法等价于CROSS JOIN LATERAL,即使x为NULL也能正常处理。
方法3:标量子查询(适合简单场景)
直接在SELECT列表里用标量子查询定义计算值,运算逻辑只写一次:
SELECT (SELECT x + 2) AS d, (SELECT x + 2) AS e FROM y;
不过这种写法在运算复杂时可读性较差,建议优先选用前两种方法。
内容的提问来源于stack exchange,提问作者codewise69420
相关产品推荐
相关产品推荐

