我有一个包含2个表的oracle 10g数据库:REBATES表和ORDERS表。

REBATES表看起来像这样:

| rebate_percentage | min_purchase |
------------------------------------
| 1.0               | 5000         |
| 1.5               | 7000         |
| 2.0               | 11000        |
| 5.0               | 20000        |


我正在尝试根据总订单确定要应用的返点百分比。我知道如何查找特定客户在特定时间范围内的所有订单总和,但是如何在一个查询中同时获取返利百分比呢?

例如,如果订单总数为16,000,那么我该如何构造一个使用此值的查询,将其与REBATES表进行比较,然后返回2.0?

最佳答案

我认为,最简单的方法是,如果您有最低和最高购买金额:

select rebate_percentage, min_purchase,
       (lead(min_purchase, 1) over (order by min_purchase) - 1) as max_purchase
from rebates


然后,您可以在联接之间进行简单的连接,联接条件如下所示:

on totalorders between rebates.min_purchase and rebates.max_purchase


您可以使用修改后的联接条件来处理最后一种情况(使用NULL):

on totalorders >= rebates.min_purchase and
    (totalorders <= rebates.max_purchase or rebates.max_purchase is null)


或者,通过更改原始逻辑以使Lead函数具有非常大的值的coalesce()。

09-25 20:39