0

我的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来得到结果?也许“当时的情况”是一个不错的选择,但我不知道该怎么写。

4

1 回答 1

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)
于 2015-08-21T02:01:36.510 回答