我有一个包含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()。