簡體   English   中英

根據范圍應用和求和值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM