CodeSnippet.Cn
代码片段
Csharp
架构设计
.NetCore
西班牙语
kubernetes
MySql
Redis
Algorithm
Ubuntu
Linux
Other
.NetMvc
VisualStudio
Git
pm
Python
WPF
java
Plug-In
分布式
CSS
微服务架构
JavaScript
DataStructure
Shared
MySQL CUME_DIST() 窗口函数
0
Csharp
小笨蛋
发布于:2021年11月05日
更新于:2021年11月05日
182
#custom-toc-container
### MySQL CUME_DIST() 函数概述 `CUME_DIST()`是一个窗口函数,它返回一组值中值的累积分布。它表示值小于或等于行的值除以总行数的行数。 `CUME_DIST()`函数的返回值大于零且小于或等于1`(0 CUME_DIST()<< = 1)`。重复的列值接收相同的`CUME_DIST()`值。 以下显示了`CUME_DIST()`函数的语法 ```sql CUME_DIST() OVER ( PARTITION BY expr, ... ORDER BY expr [ASC | DESC], ... ) ``` 在此语法中,`PARTITION BY` 子句将FROM子句返回的结果集划分为`CUME_DIST()`函数适用的分区。 `ORDER BY`子句指定每个分区中行的逻辑顺序,或者在`PARTITION BY`省略的情况下指定整个结果集。`CUME_DIST()`函数根据分区中的顺序计算每行的累积分布值。 `CUME_DIST()`函数的近似公式如下: `ROW_NUMBER() / total_rows ` ### MySQL CUME_DIST() 函数示例 让我们创建一个以scores示例的一些示例数据命名的表: ```sql CREATE TABLE scores ( name VARCHAR(20) PRIMARY KEY, score INT NOT NULL ); INSERT INTO scores(name, score) VALUES ('Smith',81), ('Jones',55), ('Williams',55), ('Taylor',62), ('Brown',62), ('Davies',84), ('Evans',87), ('Wilson',72), ('Thomas',72), ('Johnson',100); ``` 以下语句查找结果集中分数的累积分布: ```sql SELECT name, score, ROW_NUMBER() OVER (ORDER BY score) row_num, CUME_DIST() OVER (ORDER BY score) cume_dist_val FROM scores; ``` 这是输出: ```sql +----------+-------+---------+---------------+ | name | score | row_num | cume_dist_val | +----------+-------+---------+---------------+ | Jones | 55 | 1 | 0.2 | | Williams | 55 | 2 | 0.2 | | Brown | 62 | 3 | 0.4 | | Taylor | 62 | 4 | 0.4 | | Thomas | 72 | 5 | 0.6 | | Wilson | 72 | 6 | 0.6 | | Smith | 81 | 7 | 0.7 | | Davies | 84 | 8 | 0.8 | | Evans | 87 | 9 | 0.9 | | Johnson | 100 | 10 | 1 | +----------+-------+---------+---------------+ 10 rows in set (0.02 sec) ``` 在此示例中,分数按从55到100的升序排序。请注意,`ROW_NUMBER()`添加了功能以供参考。 那么`CUME_DIST()`函数如何执行计算? 对于第一行,函数查找结果集中的行数,其值小于或等于55.结果为2.然后,`CUME_DIST()`函数将2除以总行数`10:2/10`。结果是0.2或20%。相同的逻辑应用于第二行。 ```sql +----------+-------+---------+---------------+ | name | score | row_num | cume_dist_val | +----------+-------+---------+---------------+ | Jones | 55 | 1 | 0.2 | | Williams | 55 | 2 | 0.2 | | Brown | 62 | 3 | 0.4 | | Taylor | 62 | 4 | 0.4 | | Thomas | 72 | 5 | 0.6 | | Wilson | 72 | 6 | 0.6 | | Smith | 81 | 7 | 0.7 | | Davies | 84 | 8 | 0.8 | | Evans | 87 | 9 | 0.9 | | Johnson | 100 | 10 | 1 | +----------+-------+---------+---------------+ 10 rows in set (0.02 sec) ``` 对于第三行,函数查找值小于或等于62的行数。有四行。然后`CUME_DIST()`函数的结果是:`4/10 = 0.4`,即40%。 ```sql +----------+-------+---------+---------------+ | name | score | row_num | cume_dist_val | +----------+-------+---------+---------------+ | Jones | 55 | 1 | 0.2 | | Williams | 55 | 2 | 0.2 | | Brown | 62 | 3 | 0.4 | | Taylor | 62 | 4 | 0.4 | | Thomas | 72 | 5 | 0.6 | | Wilson | 72 | 6 | 0.6 | | Smith | 81 | 7 | 0.7 | | Davies | 84 | 8 | 0.8 | | Evans | 87 | 9 | 0.9 | | Johnson | 100 | 10 | 1 | +----------+-------+---------+---------------+ 10 rows in set (0.02 sec) ``` 相同的计算逻辑应用于其余行。 在本教程中,您学习了如何使用MySQL `CUME_DIST()`函数计算一组值中值的累积分布。
这里⇓感觉得写点什么,要不显得有点空,但还没想好写什么...
返回顶部
About
京ICP备13038605号
© 代码片段 2024