sql - 在同一查询中多次使用计算列

标签 sql postgresql subquery common-table-expression divide-by-zero

我经常遇到这个问题,我想多次使用在选择查询中计算的值。这是一个例子

SELECT
  complicated_function(x) as foo,
  another_complicated_function(y) as bar,
  complicated_function(x)/another_complicated_function(y) as foo_bar_rate
FROM my_table;

编写此查询的最简单方法是什么?理想情况下,我想写

SELECT
  complicated_function(x) as foo
  another_complicated_function(y) as bar,
  foo/bar as foo_bar_rate
FROM my_table;

这个问题不是关于正在计算的具体值,而是关于如何以更简单、更容易维护的方式编写此查询。

最佳答案

您可以使用WITH

WITH computed_functions as (
  SELECT
    complicated_function(x) as foo,
    another_complicated_function(y) as bar,
  FROM my_table;
)
SELECT foo, bar, foo/bar as foo_bar_rate FROM computed_functions;

但是这仍然很笨拙。如果要选择更多列,需要将其添加到WITH查询和主查询中。

关于sql - 在同一查询中多次使用计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44335622/

相关文章:

sql - 带有 many-ISNULL 的多列 UPDATE-JOIN 需要很长时间?

java - SQL DATE 与 java.sql.Date 中的时区

PostgreSQL 驱动程序崩溃在 SQLColAttribute 崩溃

sql - 根据变量使用不同的子查询

sql - 如何将子查询where条件移出子查询?

sql - 在 Java 中的 SQL Azure 报告上进行表单例份验证登录

postgresql - 将分类器保存到 postrgesql 数据库,在 scikit-learn 中

ruby-on-rails - 在 Rails 5 中,如何返回两个作用域的联合或将它们合并为一个?

sql - 可以在 Sybase ASE 中使用具有 "TOP 1 column"的相关子查询吗?

java - HQL语言如何像代码一样连接查询两个表