[英]apply and sum values based on the range
表信息:我必須使用 sql 查詢根據數量應用累進費用
交易量=49
Code |Serial num |Value_from|Value_To|Price
111 |1 |1 |20 |3
111 |2 |21 |40 |2
111 |3 |41 |9999 |1
前 20 筆交易 - 20 * 3
下一層:20 * 2
最后 - 9 * 1
總和(20 * 3,20 * 2,9 * 1)
如何使用 SQL 來實現
大多數數據庫都支持least()
和greatest()
,所以我將使用其中一個函數。 用case
表達式替換邏輯很容易。
select sum( (least(value_to, 49) - value_to + 1) * price ) as total_price
from t
where code = 111 and 49 >= value_from;
當然,您可以將49
替換為實際數量。
您已經知道您想要單獨計算的總和。 其中之一是 20 * 2(其中 2 是價格)。 現在,想想為什么它是 20 * 2。它是,因為value_to
40 不大於 49,所以你考慮這個范圍和 20 從value_to - value_from + 1
結果。
為了校對:你想要的總和
(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 構造。 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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.