• 达梦数据库之 PERCENT_RANK()over()函数和 PERCENTILE_CONT() WITHIN GROUP()OVER()函数详解


    排列百分比 PERCENT_RANK

    例 求图书的现价排列百分比

    SELECT NAME, PERCENT_RANK() OVER(ORDER BY NOWPRICE) AS NTILE FROM 
    PRODUCTION.PRODUCT; 
    
    • 1
    • 2

    查询结果如下:

    NAMENTILE
    老人与海0.000000000000000E+000
    突破英文基础词汇1.111111111111111E-001
    工作中无小事2.222222222222222E-001
    水浒传3.333333333333333E-001
    红楼梦4.444444444444444E-001

    连续百分比 PERCENTILE_CONT 和分布百分比 PERCENTILE_DISC 分析函数。
    PERCENTILE_CONT函数也是Oracle中用于计算分位数的窗口函数之一。与PERCENTILE_DISC函数不同的是,PERCENTILE_CONT函数会返回一个连续值,而不是精确匹配给定百分位的数据值。

    <PERCENTILE_CONT|PERCENTILE_DISC> (< 参 数 >) WITHIN GROUP(<ORDER BY>) OVER 
    ([<PARTITION BY>])
    
    SELECT NAME, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY NOWPRICE) OVER() AS 
    PERCENTILE_CONT FROM PRODUCTION.PRODUCT; 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查询结果如下:

    NAMEPERCENTILE_CONT
    老人与海17.6
    突破英文基础词汇17.6
    工作中无小事17.6
    水浒传17.6
    红楼梦17.6
    鲁迅文集(小说、散文、杂文)全两册17.6

    使用方法

    创建一个临时表

    create table EMP
    (
      EMPNO    NUMBER(4) not null,
      ENAME    VARCHAR2(10),
      JOB      VARCHAR2(9),
      MGR      NUMBER(4),
      HIREDATE DATE,
      SAL      NUMBER(7,2),
      COMM     NUMBER(7,2),
      DEPTNO   NUMBER(2)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    插入数据

    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800.00, null, 20);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600.00, 300.00, 30);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250.00, 500.00, 30);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975.00, null, 20);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250.00, 1400.00, 30);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850.00, null, 30);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450.00, null, 10);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000.00, null, 20);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000.00, null, 10);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500.00, 0.00, 30);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100.00, null, 20);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950.00, null, 30);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000.00, null, 20);
    insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300.00, null, 10);
    commit;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    查询表:

    select *  from emp e; 
    
    • 1

    在这里插入图片描述

    按薪水的倒序,取薪水的排名,及一定百分比的薪水值

    select e.ename,e.sal,e.deptno,
           percent_rank() over(partition by deptno order by sal desc) p_rank, --以deptno分组,以sal倒序,取出百分比排名
           PERCENTILE_CONT(0) within group(order by sal desc)
            over(partition by deptno) max_sal ,                               --以deptno分组,以sal倒序,取出占0%的薪水
           PERCENTILE_CONT(0.25) within group(order by sal desc)
            over(partition by deptno) max_sal_25,                             --以deptno分组,以sal倒序,取出25%的薪水
           PERCENTILE_CONT(0.5) within group(order by sal desc)
            over(partition by deptno) max_sal_50,                             --以deptno分组,以sal倒序,取出50%的薪水
           PERCENTILE_CONT(0.75) within group(order by sal desc)              --以deptno分组,以sal倒序,取出70%的薪水
            over(partition by deptno) max_sal_75                             
       from emp e;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

  • 相关阅读:
    BEiT: BERT Pre-Training of Image Transformers 论文笔记
    异步复位同步释放与同步复位打拍
    (01)ORB-SLAM2源码无死角解析-(57) 闭环线程→计算Sim3:理论推导(1)求解R,使用四元数
    01_openstack概述
    计算几何基础知识
    []==![]结果为true,探究 == 本质
    大学生抗疫逆行者网页作业 感动人物HTML网页代码成品 最美逆行者dreamweaver网页模板 致敬疫情感动人物网页设计制作
    【深入理解Kotlin协程】协程的上下文 CoroutineContext
    web3-引言之读取账户地址
    【CPO-TCN-BiGRU-Attention回归预测】基于冠豪猪算法CPO优化时间卷积双向门控循环单元融合注意力机制
  • 原文地址:https://blog.csdn.net/weixin_44671771/article/details/132852444