2014-12-18 6 views
1

Есть ли способ для меня рассчитать сумму двух сумм? Возьмите следующий запрос (просто примерный запрос), как я могу получить значение для combined_total? когда я запускаю свой запрос, он говорит, что total1 - это неизвестный столбец. Есть ли способ получить это значение без необходимости запуска другой суммы, объединяющей две суммы? Это просто кажется излишним и беспорядочным.Рассчитать сумму двух сумм

select sum(
    case when 
     the_date = date_sub(curdate(), interval 1 year) 
    then amount else 0 end 
) as total1, 
sum(
    case when 
     the_date between date_sub(curdate(), interval 1 year) 
     and date_add(date_sub(curdate(), interval 1 year), interval 1 day) 
    then amount else 0 end 
) as total2, 
(total1 + total2) as combined_total 
+0

Вы должны будете использовать подзапрос, так что вы можете ссылаться на псевдоним 'total1' и' total2'. – Taryn

+0

Я надеялся, что смогу обойти это также ... –

+0

Это ваш единственный вариант, если вы не хотите повторять код. – Taryn

ответ

1

Как и в случае с @bluefeet, подзапросите его и не бойтесь.

CREATE TABLE tbl 
    (`type` varchar(1), `value` int, `active` int) 
; 

INSERT INTO tbl 
    (`type`, `value`, `active`) 
VALUES 
    ('a', 1, 1), 
    ('a', 1, 1), 
    ('b', 1, 0), 
    ('b', 1, 1), 
    ('b', 1, 1), 
    ('c', 2, 1), 
    ('c', 2, 0) 
; 

select 
    type, 
    sum_active, 
    sum_inactive, 
    sum_active+sum_inactive as total 
from (
    select 
    type, 
    sum(if(active=1,value,0)) as sum_active, 
    sum(if(active=0,value,0)) as sum_inactive 
    from tbl 
    group by type 
) sums; 

sqlfiddle: http://sqlfiddle.com/#!2/9699da/15/0