摘要:在本教程中,您将学习如何使用 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], ...
)
Code language: SQL (Structured Query Language) (sql)
在此语法中, PARTITION BY
子句将FROM
子句返回的结果集划分为CUME_DIST()
函数应用的分区。
ORDER BY
子句指定每个分区中的行的逻辑顺序或在省略PARTITION BY
的情况下整个结果集的逻辑顺序。 CUME_DIST()
函数根据每行在分区中的顺序计算其累积分布值。
CUME_DIST()
函数的近似公式如下:
ROW_NUMBER() / total_rows
Code language: SQL (Structured Query Language) (sql)
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);
Code language: SQL (Structured Query Language) (sql)
以下语句查找结果集中分数的累积分布:
SELECT
name,
score,
ROW_NUMBER() OVER (ORDER BY score) row_num,
CUME_DIST() OVER (ORDER BY score) cume_dist_val
FROM
scores;
Code language: SQL (Structured Query Language) (sql)
这是输出:
在此示例中,分数按从 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()
函数来计算一组值中某个值的累积分布。