Mysql - повторное использование рассчитанных значений - PullRequest
5 голосов
/ 15 июня 2011

Я не знаю точно, как сформулировать этот вопрос, но вот он.Я хочу повторно использовать значения, которые я вычислил в своем запросе, чтобы вычислить другое значение.Переменные это правильное слово, я думаю.вот мой запрос:

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, я получаю эту ошибку Unknown column 'Entry' in 'field list'

Как еще я могу получить значение, не пересчитывая каждый раз, как это:

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

Ответы [ 3 ]

10 голосов
/ 15 июня 2011

Взгляните на этот пример

select (select @t1:=sum(field1)),(select @t2:=sum(field2)),@t1/@t2 from table
5 голосов
/ 15 июня 2011

Вы можете использовать подзапрос:

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;
1 голос
/ 15 июня 2011

Одним из вариантов будет использование подзапроса в предложении 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 в дальнейших запросах, это усложняется, и я не знаю, будет ли этооптимальная производительность, но я думаю, что она будет делать то, что вы просили в своем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...