【问题标题】:SQL How to calculate new created fields from the select statementSQL如何从select语句计算新创建的字段
【发布时间】:2023-03-22 15:59:01
【问题描述】:

我的实际查询使用CASE 语句创建两个新列。然后我想获取这些新列的值并计算它们的平均值。 下面是一个示例,它会导致相同的“列名无效”错误。我该怎么做才能解决这个问题?

select 
    1 as apples, 
    2 as pears,
    (apples + pears) as oranges

消息 207,第 16 层,状态 1,第 98 行
列名“apples”无效。
消息 207,第 16 层,状态 1,第 98 行
列名“梨”无效。

【问题讨论】:

    标签: sql select subquery case


    【解决方案1】:

    显然这是一个过于简单的例子,否则你只会做(1 + 2) as oranges,对吧?

    您不能在定义它的同一范围内引用在select 子句中定义的别名(与order by 子句分开)。一个典型的解决方法是使用子查询:

    select t.*, (apples + pears) as oranges
    from (select 1 as apples, 2 as pears) t
    

    【讨论】:

      【解决方案2】:

      select 子句中没有列或表达式优先于另一个。 1 as apples 不一定发生在 (apples + pears) as oranges 之前。您可以认为这一切同时发生,您不能同时定义和引用别名。

      所以

      select 1 as apples, 2 as pears, (1 + 2) as oranges
      

      select apples, pears, (apples + pears) as oranges
      from (select 1 as apples, 2 as pears) two_fruits
      

      【讨论】:

        猜你喜欢
        • 2021-01-28
        • 2011-02-18
        • 2021-09-05
        • 1970-01-01
        • 2010-11-06
        • 2017-02-22
        • 2020-09-26
        • 2021-01-10
        • 2010-11-19
        相关资源
        最近更新 更多