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,您可能会得到预期的结果,但这并不能保证。”相关:可能重复的