开发者社区> 王静静@> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mysql 8.0 窗口函数:cume_dist,percent_rank介绍

简介:
+关注继续查看

MySQL 8.0 引入的窗口函数,本节主要介绍row_number,cume_dist,percent_rank

row_number,cume_dist,percent_rank

  1. row_number():显示行号
  2. cume_dist:计算某个值在一组有序的数据中累计的分布

     计算结果为相对位置/总行数,返回值为(0,1]
    注意:对于重复值,计算的时候,取重复值的最后一行的位置
  3. percent_rank:和cume_dist 的不同点在于计算分布结果的方法
    计算方法为(相对位置-1)/(总行数-1)

    注意:对于重复值,计算的时候,取重复值的第一行的位
    
root@my3308.sock-8.0.11>[test]>select ROW_NUMBER() OVER w AS 'row_number', 
  c1, 
  CUME_DIST()  OVER w AS 'cume_dist',PERCENT_RANK() OVER w AS 'percent_rank'  
  from x window w as (order by c1);
+------------+------+-----------+---------------------+
| row_number | c1   | cume_dist | percent_rank        |
+------------+------+-----------+---------------------+
|          1 |    1 |     0.125 |                   0 |
|          2 |    7 |     0.375 | 0.14285714285714285 |
|          3 |    7 |     0.375 | 0.14285714285714285 |
|          4 |   10 |     0.625 | 0.42857142857142855 |
|          5 |   10 |     0.625 | 0.42857142857142855 |
|          6 |   11 |      0.75 |  0.7142857142857143 |
|          7 |   24 |         1 |  0.8571428571428571 |
|          8 |   24 |         1 |  0.8571428571428571 |
+------------+------+-----------+---------------------+
8 rows in set (0.00 sec)

#cume_dist
root@my3308.sock-8.0.11>[test]>select 1/8 as 'cume_dist_c1=1';
+----------------+
| cume_dist_c1-1 |
+----------------+
|         0.1250 |
+----------------+
1 row in set (0.00 sec)

root@my3308.sock-8.0.11>[test]>select 5/8 as 'cume_dist_c1=10';
+-----------------+
| cume_dist_c1-10 |
+-----------------+
|          0.6250 |
+-----------------+
1 row in set (0.00 sec)

#percent_rank
root@my3308.sock-8.0.11>[test]>select (2-1)/(8-1) as 'percent_rank-c1=7';
+-------------------+
| percent_rank-c1-7 |
+-------------------+
|            0.1429 |
+-------------------+
1 row in set (0.00 sec)

root@my3308.sock-8.0.11>[test]>select (7-1)/(8-1) as 'percent_rank-c1=24';
+--------------------+
| percent_rank-c1=24 |
+--------------------+
|             0.8571 |
+--------------------+
1 row in set (0.00 sec)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql : 无法将“mysql”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查
mysql : 无法将“mysql”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查
14 0
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
MySQL窗口函数——分组排序函数:number_rank(),rank(),dense_rank()
94 0
#私藏项目实操分享# 【React工作记录十三】关于ant design table组件里面文字溢出
#私藏项目实操分享# 【React工作记录十三】关于ant design table组件里面文字溢出
59 0
PolarDB-X 1.0-SQL 手册-DAL-CHECK TABLE
对数据表进行检查,主要用于 DDL 建表失败的情形。 对于拆分表,检查底层物理分表是否有缺失的情况,底层的物理分表的列和索引是否是一致; 对于单库单表,检查表是否存在。
51 0
PolarDB-X 1.0-SQL 手册-DDL-RENAME TABLE
您可以使用RENAME TABLE语句对表名进行重命名,具体语法如下: RENAME TABLE tbl_name TO new_tbl_name
62 0
Python使用Mysql官方驱动(取出dict类型的数据)
简介 虽然Python有很多连接mysql的库,比如mysqldb, pymysql~这些都很方便,现在就教大家使用mysql的官方库来操作mysql. 安装 windows: 下载链接 选择自己的windows版本和Python版本,下载msi文件后双击安装即可。
1298 0
MySQL使用SQL实现Oracle Rank函数功能
Oracle有rank函数对记录进行排名,那MySQL能否通过SQL实现排名功能呢?
4827 0
【SQL 学习】分析函数之RANK() DENSE_RANK ()
SQL> --RANK DENSE_RANK 函数SQL> select prd_type_id,sum(amount),  2  rank() over (order by sum(amount) desc) as rank,  3  dense_rank()...
706 0
SQL 基础--> 子查询
--========================= --SQL 基础--> 子查询 --=========================     /* 一、子查询     子查询就是位于SELECT、UPDATE、或DELETE语...
992 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
System Planning and Optimization for Cainiao Network
立即下载
Spark:Data Science as a
立即下载
FROM SINGLE-TENANT HADOOP TO 3000 TENANTS IN APACHE SPARK
立即下载