Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-重用计算值_Mysql_Variables - Fatal编程技术网

Mysql-重用计算值

Mysql-重用计算值,mysql,variables,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 ... 在第二轮中,我

我不知道这个问题的确切措辞,但在这里。 我想重用我在查询中计算的值来计算另一个值。 我想变量是正确的词。我的问题是:

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 ...
在第二轮中,我想使用SUM(t1.totalEvents)返回的值,但是当我使用
Entry
时,我在“字段列表”中得到了这个错误
未知列“Entry”

否则,我如何才能在不进行每次重新计算的情况下获取其中的值:

ROUND(SUM(t2.totalEvents)/SUM(t1.totalEvents)*100,2)

一种选择是在FROM子句中使用子查询,如:

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

如果您想在进一步的查询中重用Rate,那么它将变得复杂,我不知道这是否具有最佳性能,但我认为它可以满足您在示例中的要求。

您可以使用子查询:

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;

看看这个例子

select (select @t1:=sum(field1)),(select @t2:=sum(field2)),@t1/@t2 from table

这其实是最好的答案。在MySQL中很容易做到这一点,但大多数不了解这一特性的人倾向于使用子查询。根据MySQL文档,“涉及用户变量的表达式的求值顺序未定义”这个解决方案安全吗?这不是一个好的做法;结果不能保证。MySQL手册:“一般来说,除了在SET语句中,您不应该为用户变量赋值……”。“对于其他语句,例如SELECT,您可能会得到预期的结果,但这并不能保证。”相关:可能重复的