oracle 分析函数之percent_rank,percentile_cont,percentile_disc

本文介绍SQL中的percent_rank函数及其在数据分区中的应用,包括百分比排名计算及内插值方法,通过具体用例展示了如何在数据库查询中使用这些函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

percent_rank函数以0到1之间的分数形式返回某个值在数据分区中的排名 个人感觉适用场景较少

 

建表:

create table SMALL_CUSTOMERS(CUSTOMER_ID NUMBER,SUM_ORDERS  NUMBER);     
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 10);     
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 20);     
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 30);     
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 5);     
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 10);     
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 1); 

 

具体用法:

select customer_id,
       sum_orders,
       percent_rank() over(order by sum_orders) percentRank
  from small_customers t;

 

 

percentile_cont:

       percentile_cont函数对于计算内插值是非常有用的。percentile_cont函数接收一个0到1之间的几率值并返回与声明了排序的percent_rank函数计算值相等的内插值百分比。


语法:percentile_con(expr) within group(sort-clause) over(partition-clause order-by-clause)

 

具体用法:

select customer_id,
       sum_orders,
       percent_rank() over(order by sum_orders) percentRank,
       percentile_cont(0.4) within group(order by sum_orders) over(partition by customer_id) percentileCont
  from small_customers t;

 


 

percentile_disc:

      percentile_disc函数在功能上类似于percentile_cont函数,只是percentile_cont函数使用了连续分布模型,而percentile_disc函数使用了离期 分布模型。当没有值与指定的percent_rank精确匹配的时候,percentile_cont(0.5)会计算两个离得最近的值的平均值。相反,在升序排列的情况下,percentile_disc函数只取比所传递的参数percent_rank值更大的值。在降序排列的时候,percentile_disc函数只取比所传递的参数percent_rank值更小的值。

 

具体用法:

  select customer_id,
         sum_orders,
         percent_rank() over(order by sum_orders) percentRank,
         percentile_cont(0.4) within group(order by sum_orders) over(partition by customer_id) percentileCont,
         percentile_disc(0.4) within group(order by sum_orders) over(partition by customer_id) percentileDisc
    from small_customers t;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值