MySQL CUME_DIST函数
时间:2019-11-20 08:52:27 来源:igfitidea点击:
简介:在本教程中,您将学习如何使用MySQL CUME_DIST()函数来计算累积分布值。
MySQL CUME_DIST()函数概述
CUME_DIST()是一个窗口函数,它返回值在一组值中的累积分布。
它表示值小于或等于该行值的行数除以总行数。
CUME_DIST()函数的返回值大于零且小于或等于1(0 <CUME_DIST()<= 1)。
重复的列值接收相同的CUME_DIST()值。
下面显示了CUME_DIST()函数的语法:
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的表,其中包含一些用于演示的示例数据:
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);
以下语句在结果集中找到分数的累积分布:
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score) row_num, CUME_DIST() OVER (ORDER BY score) cume_dist_val FROM scores;
这是输出:
在此示例中,分数按从55到100的升序排序。
请注意,已添加ROW_NUMBER()函数以供参考。
那么CUME_DIST()函数如何执行计算呢?
对于第一行,该函数查找结果集中的行数,其值小于或等于55。
结果为2。
然后CUME_DIST()函数将2除以总行数,即10:2 / 10。
结果是0.2或20%。
相同的逻辑应用于第二行。
对于第三行,该函数查找值小于或等于62的行数。
共有四行。
然后,CUME_DIST()函数的结果为:4/10 = 0.4,即40%。
相同的计算逻辑将应用于其余行。
在本教程中,您学习了如何使用MySQL CUME_DIST()函数来计算一组值中值的累积分布。