买3送1的公式

时间:2017-10-02 08:01:23

标签: sql math plsql oracle10g

我试图编写PL / SQL,以便在购买一定数量的商品时获得多少付款。如果您购买3件商品,则可免费获赠1件商品。

因此,购买的每4件物品中有一件是免费的。这意味着如果购买了4件物品,我将支付3件物品。"如果达到10项,则应支付8项,其中2项是免费的。

p-b     v_p
***     ***
1        1                  = 1
2        2                  = 2
3        3                  = 3
4        3(1)               = 3
5        3(1) + 1           = 4
6        3(1) + 2           = 5
7        3(1) + 3           = 6
8        3(1) + 3(1)        = 6
9        3(1) + 3(1) + 1    = 7
10       3(1) + 3(1) + 2    = 8
11       3(1) + 3(1) + 3    = 9
12       3(1) + 3(1) + 3(1) = 9

我有

trunc(p-b / 3 * 2.4); 

但我的价值观不一致。

有时可以使用

trunc(p-b / 3 * 2.25); 

我做错了公式吗?我应该使用trunc或mod。

4 个答案:

答案 0 :(得分:1)

我会使用truncmodulo

SELECT p-b, (trunc(p-b /4)) * 3 + mod(p-b, 4)
FROM your_table

demo

答案 1 :(得分:1)

我们可以使用以下公式来获得结果。

假设n = p-b

n - ( n - mod( n, 4 ) ) / 4

例如:

 SELECT n, n - (n - mod(n,4))/4 result
      FROM (SELECT     LEVEL n
                  FROM DUAL
            CONNECT BY LEVEL <= 12)

答案 2 :(得分:1)

以简单的方式结果是:

-t image

答案 3 :(得分:1)

计算支付/免费资料的数量:

DECLARE
        nAmount NUMBER := '10';
        nPay NUMBER;
        nFree NUMBER;
BEGIN
        nPay := nAmount - TRUNC(nAmount / 4);
        nFree := TRUNC(nAmount / 4);
        DBMS_OUTPUT.PUT_LINE('Pay: ' || nPay);
        DBMS_OUTPUT.PUT_LINE('Free: ' || nFree);
END;
/