Mysql - 重用计算值

Ibu*_*Ibu 5 mysql variables

我不确切地知道怎么说这个问题,但在这里.我想重用我在查询中计算的值来计算另一个值.变量是我猜的正确的单词.这是我的查询:

SELECT 
    t1.label as label,SUM(t1.totalEvents) as Entry,SUM(t2.totalEvents) as Back,  
    ROUND(Entry/Back*100,2) as 'Rate'
FROM 
    trackReports_daily t1
.... rest of query ...
Run Code Online (Sandbox Code Playgroud)

在回合中我想使用SUM返回的值(t1.totalEvents),但是当我使用时Entry我得到了这个错误Unknown column 'Entry' in 'field list'

如果没有像这样重新计算,我怎么能在那里获得价值:

ROUND(SUM(t2.totalEvents)/SUM(t1.totalEvents)*100,2)
Run Code Online (Sandbox Code Playgroud)

Nic*_*ssu 10

看看这个例子

select (select @t1:=sum(field1)),(select @t2:=sum(field2)),@t1/@t2 from table
Run Code Online (Sandbox Code Playgroud)

  • 根据MySQL文档“涉及用户变量的表达式的求值顺序未定义” http://dev.mysql.com/doc/refman/5.6/en/user-variables.html 这个解决方案安全吗? (2认同)
  • 这不是一个好的做法;无法保证结果。MySQL手册:“作为一般规则,除了SET语句之外,你永远不应该给用户变量赋值......”。“对于其他语句,例如 SELECT,您可能会得到您期望的结果,但这并不能保证”。 (2认同)

AJ.*_*AJ. 5

您可以使用子查询:

SELECT label, Entry, Back, ROUND(Entry/Back*100,2) as 'Rate'
FROM (
    SELECT SUM(t1.totalEvents) as Entry, SUM(t2.totalEvents) as Back, t1.label as label
    FROM trackReports_daily t1 
    .... rest of query ... 
) as temp;
Run Code Online (Sandbox Code Playgroud)