在 SQL 中对别名进行算术运算

Posted

技术标签:

【中文标题】在 SQL 中对别名进行算术运算【英文标题】:Doing arithmetic on alias in SQL 【发布时间】:2013-11-19 05:35:21 【问题描述】:

在我的 SQL 查询中,我需要对别名进行一些算术运算。

SELECT 
    MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME1, 
    MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME2,  
    MYALIASNAME1 - MYALIASNAME2 AS MYALIASHNAME3
FROM 
    MYTABLE

但是,这不起作用,因为它没有将 MYALIASNAME1MYALIASNAME2 视为列。任何想法我怎样才能做到这一点?

我正在使用 H2,特别是 h2-1.3.173.jar。我在服务器模式下使用它。

谢谢。

【问题讨论】:

***.com/questions/6081436/… 请看看这对你有什么意义。 请告诉我们这是什么具体的数据库系统 - 许多事情是特定于供应商的。你在使用 mysql 吗?后格雷斯? SQL 服务器?甲骨文? IBM DB2?完全不同的东西?请更新您的标签以显示您正在使用的数据库系统(以及它的哪个版本!) - 谢谢! 【参考方案1】:

试试这个。

SELECT X.MYALIASNAME1 - X.MYALIASNAME2 AS MYALIASNAME3 FROM
(
    SELECT 
        MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME1, 
        MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME2

    FROM 
        MYTABLE
)X

【讨论】:

【参考方案2】:

不要使用别名

SELECT 
   MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME1, 
   MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME2,  
   MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN  - MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASHNAME3
FROM 
    MYTABLE

或者使用中间步骤

SELECT MYALIASNAME1, MYALIASNAME2,  MYALIASNAME1 - MYALIASNAME2 AS MYALIASHNAME3
FROM  (

   SELECT 
       MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME1, 
       MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME2
   FROM 
       MYTABLE
 ) TableAlias

【讨论】:

【参考方案3】:

使用常用表表达式

with cte as (
    select MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME1, 
        MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME2
        
    from table
)
    
select MYALIASNAME1 - MYALIASNAME2 AS MYALIASHNAME3 from cte

【讨论】:

【参考方案4】:

它会起作用的......

"SELECT 
    MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME1, 
    MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN AS MYALIASNAME2,  
    (MY_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN) - (MY_SECOND_COMPLEX_EXPRESSION_USING_SUM_AND_CASEWHEN) AS MYALIASHNAME3
FROM 
    MYTABLE"

【讨论】:

以上是关于在 SQL 中对别名进行算术运算的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Python 中对 FITS 文件使用算术运算?

Oracle-18-select语句初步&SQL中用算术表达式&别名的使用&连接运算符%distinct&where子句

使用简单算术运算和别名时,即使表中的数据不为零,JDBC 查询也会返回零

MySQL运算符,SQL,算术比较逻辑位,优先级,正则表达式,完整详细可收藏

如何在 Rust Diesel 中使用时间戳和间隔进行算术运算

什么是算术运算?什么是关系运算?什么是逻辑运算?