2015-08-21 6 views
0

мой MySQL таблица выглядит так:Как использовать 'select' in 'case when then' в mysql?

id  value 
1  10 
2  20 
3  30 
4  40 
5  50 

есть два арг: начало и конец, то, что я хочу, как это:

when start=end, the result is 0 
when start>end, the result is 'sum(value) where id<=start and id>end' 
when start<end, the result is 'sum(value) where id>start and id<=end' 

как написать SQL, чтобы получить результат? может быть «случай, когда тогда» - хороший выбор, но я не знаю, как писать.

+3

«два аргумента» - арг к чему? Хранимая процедура? Функция в вашем клиентском коде? – Amadan

+0

Как сказал Амадан, добавив немного больше информации о вашем исходном вопросе, на этот вопрос должен быть легко ответить. – Nathan

+0

спасибо за ваши комментарии, args означает аргументы Mysql через Mybatis. –

ответ

1

Вы можете поместить эту логику в case заявление, как это:

select (cast when @start = @end then 0 
      when @start > @end 
      then sum(case when id <= @start and id >= @end then value end) 
      when @start < @end 
      then sum(case when id > @start and id <= @end then value end) 
     end) 
from table t; 

Ваша логика очень близка к этой простой версии:

select sum(case when id > least(@start, @end) and 
        id <= greatest(@start, @end) 
       then value else 0 
      end)