(20 - 1 + 1) * 3 because 20 <= 49
(40 - 21 + 1) * 2 because 40 <= 49
(49 - 41 + 1) * 1 because 9999 > 49, but 41 <= 49
您需要对照给定的值(在您的例子中是49)检查范围,对于给定的值,您需要if/then构造。如果/那么是 CASE WHEN ... THEN 在sql中。
select
sum
(
case
when value_to <= given.value then (value_to - value_from + 1) * price
when value_from <= given.value then (given.value - value_from + 1) * price
end
) as total_price
from (select 49 as value) given
cross join ranges;
2条答案
按热度按时间2lpgd9681#
大多数数据库支持
least()
以及greatest()
,所以我将使用其中一个函数。用一个case
表情。当然,你会替换
49
不管你的实际数量是多少。toe950272#
你已经知道你想要单独计算的总和。其中一个是202(2是价格)。现在,想想为什么它是202。是的,因为
value_to
40不大于49,所以考虑这个范围和20个结果value_to - value_from + 1
.为了校对:你要的是
您需要对照给定的值(在您的例子中是49)检查范围,对于给定的值,您需要if/then构造。如果/那么是
CASE WHEN ... THEN
在sql中。