首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SELECT中赋值长表达式?

如何在SELECT中赋值长表达式?
EN

Stack Overflow用户
提问于 2016-11-11 13:36:54
回答 4查看 49关注 0票数 1

怎样才能不重复使用avg(examinee_grade_science + ...)

如您所见,我在CASE表达式下重复了一遍。我可以将它赋给一个变量并在CASE表达式中使用它吗?

我试过使用SET (set @ave_grade = examine_grade...),但它不起作用。有没有可能呢?

代码语言:javascript
复制
select  
    examinee_grade_science as "Science Grade", 
    examinee_grade_math as "Math Grade", 
    examinee_grade_literature as "Literature Grade",
    examinee_grade_science + examinee_grade_math +  examinee_grade_literature as "TOTAL",
    avg(examinee_grade_science + examinee_grade_math + examinee_grade_literature) as "AVERAGE",  
    case when avg(examinee_grade_science + examinee_grade_math + examinee_grade_literature) < 93 
        then 'PASSED' 
        else 'FAILED' 
    end as "REMARKS"
from examinee
EN

回答 4

Stack Overflow用户

发布于 2016-11-11 14:02:40

使用子查询计算平均值,然后使用分配给外部查询中计算的平均值的别名检查通过/失败

代码语言:javascript
复制
SELECT *,
 case when AVERAGE < 93 
                    then 'PASSED' 
                    else 'FAILED' 
              end as "REMARKS"
FROM
(
    select  
                  examinee_grade_science as "Science Grade", 
                  examinee_grade_math as "Math Grade", 
                  examinee_grade_literature as "Literature Grade",
                  examinee_grade_science + examinee_grade_math +  examinee_grade_literature as "TOTAL",
                  avg(examinee_grade_science + examinee_grade_math + examinee_grade_literature) as "AVERAGE"



    from examinee
) t
票数 3
EN

Stack Overflow用户

发布于 2016-11-11 15:00:06

我将使用CROSS APPLY为表达式创建别名:

代码语言:javascript
复制
select
    examinee_grade_science as "Science Grade", 
    examinee_grade_math as "Math Grade", 
    examinee_grade_literature as "Literature Grade",
    grade_sum as "TOTAL",
    avg(grade_sum) as "AVERAGE",
    case when avg(grade_sum) < 93 
        then 'PASSED' 
        else 'FAILED' 
    end as "REMARKS"
from
    examinee
    CROSS APPLY
    (
        SELECT 
            examinee_grade_science + examinee_grade_math + examinee_grade_literature AS grade_sum
    ) AS A
;
票数 2
EN

Stack Overflow用户

发布于 2016-11-11 13:40:41

你有没有试过使用平均别名以防万一?在Teradata中,可以在case语句中使用别名。请检查它是否在SQL server中?

代码语言:javascript
复制
select  
              examinee_grade_science as "Science Grade", 
              examinee_grade_math as "Math Grade", 
              examinee_grade_literature as "Literature Grade",
              examinee_grade_science + examinee_grade_math +  examinee_grade_literature as "TOTAL",
              avg(examinee_grade_science + examinee_grade_math + examinee_grade_literature) as "AVERAGE",


              case when AVERAGE < 93 
                    then 'PASSED' 
                    else 'FAILED' 
              end as "REMARKS"


from examinee
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40541763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档