CUME_DIST函数。

CUME_DIST:-

=============

此功能计算的是分配的行数少于或等于的行数少于或等于行数的比率。

PERCENT_RANK:此函数使用公式计算行的分配比例与分区中行数的比例

(RRP-1)/(NRP-1)

分区的RRP等级。

NRP-行的分区数。

这两个功能都将DENSE_RANK用于其排名,并且可以指定为升序或降序。

示例示例1

----------------------------------

SELECT DEPTNO,EMPNO,SUM(SAL) SALARY,
CUME_DIST() OVER(ORDER BY SUM(SAL)DESC)CUM_SAL,
PERCENT_RANK() OVER (ORDER BY SUM(SAL)DESC)PER_SAL
FROM EMP
GROUP BY DEPTNO,EMPNO
ORDER BY SALARY DESC;
示例2

----------------------------------

SELECT EMPNO,SUM(SAL) SALARY,
RANK() OVER(ORDER BY SUM(SAL) DESC) RANK,
DENSE_RANK() OVER(ORDER BY SUM(SAL) DESC)DENSE_RANK,
CUME_DIST() OVER(ORDER BY SUM(SAL)DESC)CUM_SAL,
PERCENT_RANK() OVER (ORDER BY SUM(SAL)DESC)PER_SAL
FROM EMP
GROUP BY EMPNO
ORDER BY RANK;
示例示例3

-----------------------------------

员工薪水3000的排名。

-------------------------------------------------- ----------------------------------------

SELECT 
RANK(3000) WITHIN GROUP
(ORDER BY SUM(SAL) DESC) HYP_RANK,
DENSE_RANK(3000) WITHIN GROUP
(ORDER BY SUM(SAL) DESC) HYP_D_RANK,
CUME_DIST(3000) WITHIN GROUP
(ORDER BY SUM(SAL) DESC) HYP_CUM_RANK,
PERCENT_RANK(3000) WITHIN GROUP
(ORDER BY SUM(SAL) DESC ) HYP_PER_RANK
FROM EMP
GROUP BY EMPNO;
“ WITHIN GROUP”条款具有在确定排名之前将虚构行注入结果集中的作用。

From: https://bytes.com/topic/oracle/insights/671959-cume_dist-function

<think>好的,我需要解释CUME_DIST()函数的用法。首先,这个函数属于窗口函数中的分布函数,用于计算某个值在数据集中的累积分布。用户可能想知道它的基本语法、参数和应用场景。 根据引用[3]和[4],CUME_DIST()计算的是当前行及其之前所有行占整个分区的比例,即相对位置。例如,如果有6行数据,当前行是第3行,那么CUME_DIST()的结果是3/6=0.5。不过要注意,引用[4]提到的是“当前行数占所有行数的百分比”,这里可能需要澄清是到当前行为止的累计比例。此外,引用[3]中的示例说明结果的计算方式,比如第三行的结果是0.4,可能因为分区内的总行数不同或者排序影响。 接下来需要整理函数的语法结构。引用[1]提到LEAD()函数的语法,可以推断CUME_DIST()的语法类似,即不需要参数,但需要OVER子句指定分区和排序。例如: CUME_DIST() OVER (PARTITION BY expr ORDER BY expr) 应用场景方面,引用[3]和[4]指出它适用于统计分析,比如确定学生的成绩分布或销售人员的业绩排名百分比。同时,引用[5]提到Pandas实现类似功能,可能用户也想知道如何在其他工具中使用,但当前问题聚焦于数据库中的用法。 还需要注意和PERCENT_RANK()的区别。根据引用[3],PERCENT_RANK的计算公式是(rank-1)/(rows-1),而CUME_DIST()是当前行的位置除以总行数。例如,当排序相同时,CUME_DIST()会将这些行视为同一位置,导致结果相同。 最后,用户可能需要示例来更好地理解。例如,引用[3]中的SQL示例展示了不同函数的结果对比,可以引用这个例子来说明CUME_DIST()的具体输出。</think>### CUME_DIST() 函数详解 #### 1. 函数定义 $CUME\_DIST()$ 是 MySQL 中的窗口函数,用于**计算当前行在分区内的累积分布**,即当前行及其之前行的数量占分区总行数的比例。公式为: $$CUME\_DIST() = \frac{\text{当前行的位置}}{\text{分区总行数}}$$ 其中“位置”由 `ORDER BY` 排序决定,相同值视为同一位置[^3][^4]。 --- #### 2. 语法结构 ```sql CUME_DIST() OVER ( PARTITION BY <分区字段> ORDER BY <排序字段> [ASC|DESC] ) ``` - **PARTITION BY**:将数据划分为多个独立分区(可选) - **ORDER BY**:定义分区内数据的排序规则(必选) --- #### 3. 与 PERCENT_RANK() 的区别 | 函数 | 公式 | 取值范围 | 特点 | |------------------|--------------------------|------------|--------------------------| | $CUME\_DIST()$ | $\frac{\text{位置}}{N}$ | $[0,1]$ | 计算累积分布,包含相同值 | | $PERCENT\_RANK()$ | $\frac{rank-1}{N-1}$ | $[0,1]$ | 计算相对排名百分比 | 示例:若某分区有 6 行数据,排序后第三行的计算结果: - $CUME\_DIST() = 3/6 = 0.5$ - $PERCENT\_RANK() = (3-1)/(6-1) = 0.4$[^4] --- #### 4. 应用场景 1. **成绩分布分析** 计算学生成绩的累积百分比,如“成绩≤80分的学生占比” ```sql SELECT student_id, score, CUME_DIST() OVER (ORDER BY score DESC) AS percentile FROM exam_results; ``` 2. **销售排名统计** 统计销售人员的业绩在部门内的累积分布 ```sql SELECT salesperson, revenue, CUME_DIST() OVER (PARTITION BY department ORDER BY revenue DESC) AS top_percent FROM sales_data; ``` --- #### 5. 实际示例 通过员工薪资表演示函数效果(引用自示例数据[^3]): ```sql SELECT dname, ename, salary, CUME_DIST() OVER (PARTITION BY dname ORDER BY salary DESC) AS cume_dist FROM employee; ``` 结果说明: | 部门 | 员工 | 薪资 | cume_dist | |-------|------|------|-----------| | 研发部 | 张三 | 9000 | 0.5 | | 研发部 | 李四 | 8000 | 1.0 | | 销售部 | 王五 | 7000 | 0.33 | - **研发部**:总行数=2,李四的 $CUME\_DIST()=2/2=1.0$ - **销售部**:总行数=3,王五的 $CUME\_DIST()=3/3=1.0$ ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值