在SELECT中重用别名

Mat*_*ard 6 mysql sql database

我想要做的是添加另一个计算的列(cr - dr)

看到你不能在SELECT子句中重用别名,你会怎么做计算 total

    SELECT SUM(b.bet_win * cy.fx_rate )as dr, SUM(b.bet_loss * cy.fx_rate ) as cr, cr+dr as total
    FROM ....
    WHERE ....
Run Code Online (Sandbox Code Playgroud)

Dav*_*kle 9

在SQL Server或Oracle中,我使用CTE,但由于您使用的是MySQL,因此您将使用子查询:

SELECT dr, cr, cr + dr as total 
FROM (
    SELECT 
         SUM(b.bet_win * cy.fx_rate ) as dr, 
         SUM(b.bet_loss * cy.fx_rate ) as cr
    FROM ....
    WHERE ....) t;
Run Code Online (Sandbox Code Playgroud)


e-m*_*tiv 8

编辑:不工作.看评论.在这种情况下,是不是更快地使用用户变量

SELECT
  @dr:=SUM(b.bet_win * cy.fx_rate ),
  @cr:=SUM(b.bet_loss * cy.fx_rate ), 
  @cr+@dr as total
Run Code Online (Sandbox Code Playgroud)

  • 用户定义的变量不能以这种方式工作,至少在MySQL中是这样.@dr和@cr的值在*处理完*之后才会设置.当它构建结果集的第一行时,@ dr是NULL而@cr是NULL,所以`total`是NULL.然后将@dr设置为胜利总和,将@cr设置为损失总和.当它构建第二行并计算`total` @dr时,@ cr具有前一行的值.所以`total`将是前一行的总数. (3认同)
  • 哇,确实!mysql 手册编辑器应该把它放在页面的顶部,而不是太晚。谢谢 jtanium 让我们知道。 (3认同)