更新时间:2026-07-03 GMT+08:00
分享

cume_dist

功能描述

cume_dist函数用于求累计分布,相当于求分区中大于等于或小于等于当前行的数据在分区中的占比。

使用限制

窗口函数的使用限制如下:

  • 窗口函数只能出现在select语句中。
  • 窗口函数中不能嵌套使用窗口函数和聚合函数。
  • 窗口函数不能和同级别的聚合函数一起使用。

语法格式

cume_dist() over([partition_clause] [orderby_clause])

参数说明

参数

是否必选

说明

partition_clause

指定分区。分区列的值相同的行被视为在同一个窗口内。

orderby_clause

指定数据在一个窗口内如何排序。

返回值说明

返回DOUBLE类型的值。

示例

为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表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

相关文档