2016-05-28 6 views
0

Скажем, у меня есть таблица tableA и мой запроскак вычесть два результирующие значения в MySQL

select id, 
     if(cond1, value, 0) firstval, 
     if(cond2, value, 0) secondval, 
     firstval-secondval diff 
from tableA 

Этот запрос дает Unknown column firstval in field list ошибку. Я знаю, что могу рассчитать diff как if(cond1, value, 0)-if(cond2, value, 0) diff, но я не хочу добавлять условие снова и без внутренних/вспомогательных запросов.

EDIT: Моя абстрактная идея следующим образом

Структура таблицы

id | type | recorddate | value 
========================================= 
1   A  2015-12-17  9 
2   B  2015-12-19  5 
3   A  2016-01-13  31 
4   B  2016-01-14  23 
5   A  2016-01-31  44 
6   B  2016-02-07  38 

и так далее ...

Запрос:

select 
    type, 
    if(max(recorddate), value, 0) firstval, 
    if(secondmax(recorddate), value, 0) secndval, 
    firstval-secndval diff 
from table 
where month(recorddate)=1 
group by type with rollup 

Результирующая таблица на основе выше запрос:

type | firstval | secndval | diff 
====================================== 
A  44   31   13 
B  23   5   18 
Total 67   36   31   
+0

Что случилось с использованием подзапросов? Почему ты этого не хочешь? В противном случае я не думаю, что вы можете это сделать. – mhawke

+0

если есть подзапрос, мы не можем использовать 'group by with rollup' ... Разве это не так? – mpsbhat

+0

Возможно, вы покажете нам полную проблему? – splash58

ответ

2

Добавить подзапрос

select *, firstval-secondval diff 
    from 
    (select id, if(cond1, value, 0) firstval, if(cond2, value, 0) secondval 
     from tableA 
    ) t 
0

Вы хотите, чтобы получить вычитают два результирующих значений. Я прав?

Так что для проверки firstval с одним условием, если условие true, тогда получите это значение, иначе первое значение равно 0. Сделайте то же самое и для secondval. Чтобы вы не получили неизвестную ошибку столбца. Прежде всего, вы должны иметь имя столбца firstval и secondval.

Select firstval-secondval as total from tableA; 

Он будет работать для простого вычитания.

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

  • Нет связанных вопросов^_^