传统上,Oracle计算百分比的方法是在总计报告的子查询中使用SUM函数总计报告,然后把那个结果放到细节表中相除来计算百分比。你还可以用一个子查询作为SELECT语句表达式:
RATIO_TO_REPORT解析函数使得这种类型的查询更容易编码。Oracle 8i中引入了这个函数,它的格式如下:
RATIO_TO_REPORT (expr) OVER (query_partition_clause)
列表A说明一个简单的例子。对163号销售代表来说,每位客户的销售额占这名销售代表的总销售额的百分比是多少呢?在这种情况下,查询分区子句(partition
clause)为空,因此得到的结果是对返回的所有行计算得出。
列表B增加了一个查询分区子句,进一步按客户细分报告。PARTITION BY
customer_id子句重新安排每位客户的总数,进而说明每名客户的哪次订单最为关键。你可以查看客户102的情况,他的两个订单相对平衡;
但客户103的一个订单占这名客户总订单额的很大一部分。
SELECT
sales_rep_id,
customer_id,
order_total,
ratio_to_report(order_total) OVER ()
pct_total
FROM orders
WHERE sales_rep_id =
163ORDER BY sales_rep_id,
customer_id, order_id