2013-11-21 3 views
2

Давайте предположим, что у меня есть запрос, как это:Разве MySQL вычисляет один и тот же SUM дважды?

SELECT Sum(imp)     AS totalimp, 
     Sum(money)    AS totalmoney, 
     (Sum(money)/Sum(imp)) AS result 
FROM table 
GROUP BY date 

кэшировать ли MySQL две суммы, или суммы (ИМП) и SUM (деньги) рассчитывается в два раза?

Если нет, существует ли способ избежать MySQL пересчета суммы дважды?

Спасибо!

+1

Они будут рассчитаны один раз для каждого 'date' ... которые вы пропустили в вашем' SELECT'. – Kermit

+0

Хорошо, тогда это здорово, если MySQL не делает то же самое SUM дважды! (О недостающей дате, на самом деле это фиктивный запрос, чтобы разоблачить проблему) – user3017110

+0

[Вот демо для вас] (http://sqlfiddle.com/#!2/ca44c/1) – Kermit

ответ

0
SELECT @totalimp := Sum(imp) AS totalimp, 
     @totalmoney := Sum(money) AS totalmoney, 
     (@totalmoney/@totalimp) AS result 
FROM table 
GROUP BY date 
+2

Я уже пробовал это, но Мой результат всегда равен NULL с помощью этого метода. Кажется, что нецелесообразно назначать переменную и использовать ее в одно и то же время (из того, что я нашел) – user3017110

0

Как насчет

SELECT @totalimp := x.totalimp, 
    @totalmoney := x.totalmoney, 
    @result := (x.totalmoney/x.totalimp) 
FROM (SELECT Sum(imp) AS totalimp, 
      Sum(money) AS totalmoney 
     FROM table 
     GROUP BY date) x 
+0

Да, это сработает! (Но у меня уже есть много уровней подзапросов, подобных этому, и я хотел избежать добавления еще одного!) Но поскольку MySQL не пересчитывает SUM два раза, я могу оставить его как запрос в моем вопросе :) – user3017110

Смежные вопросы