开发者

Mysql - reusing calculated values

开发者 https://www.devze.com 2023-03-13 02:04 出处:网络
I don\'t know exactly how to word this question but here it is. I want to reuse values that i calculated in my query to calculate another value.

I don't know exactly how to word this question but here it is. I want to reuse values that i calculated in my query to calculate another value. Variables is the correct word i guess. here is my 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 ...

Inside round i want to to use the value returned by SUM(t1.totalEvents), but when i use Entry i get this error Unknown column 'Entry' in 'field list'

How else can i get the value in there without recalculating everytime like this:

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


Take a look at this example

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


You could use a subquery:

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;


One option would be to use a subquery in the FROM clause like:

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 ...

If you want to reuse Rate in further queries then it will get complicated, and I do not know if this will have optimal performance, but I think it will do what you asked for in your example.

0

精彩评论

暂无评论...
验证码 换一张
取 消