【问题标题】: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