
# cume_dist
cume_dist函数用于求累计分布，相当于求分区中大于等于或小于等于当前行的数据在分区中的占比。
#### 使用限制
窗口函数的使用限制如下：
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
 
#### 命令格式
```
cume_dist() over([partition_clause] [orderby_clause])
```
#### 参数说明
表1参数说明 
| 参数               | 是否必选 | 说明                        |
|:---|:---|:---|
| partition_clause | 否    | 指定分区。分区列的值相同的行被视为在同一个窗口内。 |
| orderby_clause   | 否    | 指定数据在一个窗口内如何排序。           |
   
#### 返回值说明
返回DOUBLE类型的值。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
a为NULL，则返回NULL。
#### 示例代码
为便于理解函数的使用方法，本文为您提供源数据，基于源数据提供函数相关示例。创建表salary，并添加数据，命令示例如下：
```
CREATE EXTERNAL TABLE salary (
dept STRING, -- 部⻔名称
userid string, -- 员⼯ID
sal INT -- 薪⽔
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
stored as textfile;
```
添加数据如下：
```
d1,user1,1000
d1,user2,2000
d1,user3,3000
d2,user4,4000
d2,user5,5000
```
- 统计小于等于当前薪水的人数占比
  ```
  select dept, userid, sal,
         cume_dist() over(order by sal) as cume1
  from salary;
  --  结果：
  d1 user1 1000 0.2
  d1 user2 2000 0.4
  d1 user3 3000 0.6
  d2 user4 4000 0.8
  d2 user5 5000 1.0
  ```
  
- 按部⻔分组统计⼩于等于当前薪⽔的⼈数的⽐例
  ```
  select dept, userid, sal,
         cume_dist() over (partition by dept order by sal) as cume2
  from salary;
  -- 结果：
  d1 user1 1000 0.3333333333333333
  d1 user2 2000 0.6666666666666666
  d1 user3 3000 1.0
  d2 user4 4000 0.5
  d2 user5 5000 1.0
  ```
  
- 按照sal降序排序后，结果就是统计 ⼤于等于 当前薪⽔的⼈数的⽐例
  ```
  select dept, userid, sal,
         cume_dist() over(order by sal desc) as cume3
  from salary;
  -- 结果：
  d2 user5 5000 0.2
  d2 user4 4000 0.4
  d1 user3 3000 0.6
  d1 user2 2000 0.8
  d1 user1 1000 1.0
  select dept, userid, sal,
         cume_dist() over(partition by dept order by sal desc) as cume4
  from salary;
  -- 结果：
  d1 user3 3000 0.3333333333333333
  d1 user2 2000 0.6666666666666666
  d1 user1 1000 1.0
  d2 user5 5000 0.5
  d2 user4 4000 1.0
  ```
  
 
