【问题标题】:Define new columns using other columns names使用其他列名定义新列
【发布时间】: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


    【解决方案1】:

    你可以尝试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
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式之一做到这一点:

      1. 将变量创建为 CTE
      2. 将您的查询转换为子查询,然后查询它
      3. 为每次使用重新计算相同的计算

      如果等式不是那么复杂,我建议使用第三个选项。

      【讨论】:

        【解决方案3】:

        解决此问题的“典型”方法使用 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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-27
          相关资源
          最近更新 更多