什么是中位数?
数值型数组的中位数是在数据排序后位于数组中心项的值。如不雅数组有偶数个元素,中位数就是最中心的两个数值的平劫数。
中位数对于懂得“我的值是否位于中心?”异常有效。比如,我在黉舍的最后一次测验中得了 D (或 80),那么我的在全班同窗中的排名是否在前 50%?
举一个具体的例子,我们看看大年夜黉舍的┞封些测试分数中找到中位数的过程:[55, 80, 95, 100, 99, 70, 60]。
- 起首,对数组排序:[55, 80, 95, 100, 99, 70, 60] ===> [55, 60, 70, 80, 95, 99, 100].
- 这个数组包含 7 个元素,不是偶数,所以中位数是 (7 / 2 + 1),即第 4 项的值 => 80。
在 MySQL 上钩算某列数据的中位数
【编辑推荐】
- SQL Server正式涌如今Linux平台上
- 7个原因告诉你为什么要选择ArangoDB “多模型” 数据库?
- 10道Hadoop面试真题及解题思路
- MySQL技能晋升篇 — sqlyog高等应用
- 深度解读 | 阿里云新一代关系型数据库 PolarDB
很不幸,MySQL 并未内置计算列数据中位数的函数。是以,我们须要本身创建萌芽。
假如我们想大年夜“grades”列中查找中位数。来看看我们要创建的萌芽是什么算法:
- 对“grades”排序并为排序后的每一行附加序号(行号)
- 如不雅总行数是奇数,找到位于有序列表中心地位的值。
- 如不雅总行数是偶数,找到位于有序列表中心两个地位的值。
- 计算膳绫擎第 (3) 步和第 (4) 取得值的平均值。
- 返回这个平均值,它就是中位数。
那么如许的萌芽该怎么写?
- SET @rownum := -1;
- SELECT
- AVG(g.grade)
- FROM
- (SELECT @rowindex:=@rowindex + 1 AS rowindex,
- grades.grade AS grade
- FROM grades
- ORDER BY grades.grade) AS g
- WHERE
- t.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2));
解释一下:
- 先大年夜内部的一个子萌芽开端 —— 为 @rowindex 赋值的子萌芽会为每个成就付与一个自增后的序号,并对 grades 排序 [译者注:按逻辑和代码是先排序再付与序号]。
- 有了排好序的成就列表之后,外层萌芽会获取位中心地位的值。如不雅数组元素是奇数个,两个值都是取的位于正中那个值。
- 然后,外层萌芽的 SELECT 子句返回上述两个值的平均值作为中位数。
你看,这并不是简单的运行 MEDIAN(column_name),但它可行。我们等待 MySQL 会决定将这一功能添加到内置产品中,这将简化获取中位数的萌芽。
推荐阅读
此文道出了本人进修Stacking入门级应用的心路过程。在进修过程中感激@贝尔塔的模型融合办法,以及如安在 Kaggle 首战中进入前 10%这篇文┞仿(作者是章凌豪)。对于两位供给的信息,感激不尽。同时还有K>>>详细阅读
地址:http://www.17bianji.com/lsqh/37734.html
1/2 1