mysql中dist是_MySQL CUME_DIST() 函数

MySQL CUME_DIST() 函数

简介:在本教程中,您将学习如何使用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;

这是输出:

+----------+-------+---------+---------------+

| 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的升序排序。请注意,

那么CUME_DIST()函数如何执行计算?

对于第一行,函数查找结果集中的行数,其值小于或等于55.结果为2.然后,CUME_DIST()函数将2除以总行数10:2/10。结果是0.2或20%。相同的逻辑应用于第二行。

+----------+-------+---------+---------------+

| 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%。

+----------+-------+---------+---------------+

| 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()函数计算一组值中值的累积分布。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`self.dist_func = dist_func` 是 Python 类的一个方法,其作用是将输入的 `dist_func` 函数赋值给类的实例属性 `dist_func`。 例如,当我们定义一个类 `Point`,并且有一个方法 `set_dist_func`,其作用是将一个函数作为参数传入,并将该函数赋值给实例属性 `dist_func`,代码如下: ``` class Point: def __init__(self, x, y): self.x = x self.y = y self.dist_func = None def set_dist_func(self, dist_func): self.dist_func = dist_func ``` 在这个例子,我们定义了一个 `Point` 类,该类有 `x` 和 `y` 两个实例属性,以及一个名为 `set_dist_func` 的方法,该方法将一个函数作为参数传入,并将其赋值给实例属性 `dist_func`。 例如,我们定义一个计算两个点之间欧几里得距离的函数 `euclidean_distance`,然后通过 `set_dist_func` 方法将该函数赋值给一个 `Point` 实例的 `dist_func` 属性,代码如下: ``` import math def euclidean_distance(p1, p2): return math.sqrt((p1.x - p2.x)**2 + (p1.y - p2.y)**2) p1 = Point(0, 0) p2 = Point(3, 4) p1.set_dist_func(euclidean_distance) print(p1.dist_func(p1, p2)) # 输出 5.0 ``` 在这个例子,我们创建了两个 `Point` 实例 `p1` 和 `p2`,其 `p1` 的坐标为 `(0, 0)`,`p2` 的坐标为 `(3, 4)`。然后,我们将 `euclidean_distance` 函数通过 `set_dist_func` 方法赋值给 `p1` 实例的 `dist_func` 属性。最后,我们调用 `p1.dist_func(p1, p2)` 方法计算 `p1` 和 `p2` 之间的欧几里得距离,并输出结果 `5.0`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值