千家信息网

MySQL如何计算数据中位数详解

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,下文内容主要给大家带来MySQL如何计算数据中位数详解,这里所讲到的知识,与书籍略有不同,都是专业技术人员在与用户接触过程中,总结出来的,具有一定的经验分享价值,希望给广大读者带来帮助。要得到一组数据
千家信息网最后更新 2026年11月02日MySQL如何计算数据中位数详解

下文内容主要给大家带来MySQL如何计算数据中位数详解,这里所讲到的知识,与书籍略有不同,都是专业技术人员在与用户接触过程中,总结出来的,具有一定的经验分享价值,希望给广大读者带来帮助。

要得到一组数据的中位数(例如某个地区或某家公司的收入中位数),我们一般要将这一任务细分为 3 个小任务:

1.将数据排序,并给每一行数据给出其在所有数据中的排名;

2.找出中位数的排名数字;

3.找出中间排名对应的值;

下面以某公司员工月收入为例,示例 MySQL 的一些复杂语句的使用。

方法一

创建测试表

首先创建一个收入表,建表语句为:

CREATE TABLE IF NOT EXISTS `employee` (  `id`     INT                  AUTO_INCREMENT PRIMARY KEY,  `name`   VARCHAR(10) NOT NULL DEFAULT '',  `income` INT         NOT NULL DEFAULT '0')  ENGINE = InnoDB  DEFAULT CHARSET = utf8;INSERT INTO `employee` (`name`, `income`)VALUES ('麻子', 20000);INSERT INTO `employee` (`name`, `income`)VALUES ('李四', 12000);INSERT INTO `employee` (`name`, `income`)VALUES ('张三', 10000);INSERT INTO `employee` (`name`, `income`)VALUES ('王二', 16000);INSERT INTO `employee` (`name`, `income`)VALUES ('土豪', 40000);

完成任务 1

将数据排序,并给每一行数据给出其在所有数据中的排名:

SELECT t1.name, t1.income, COUNT(*) AS rankFROM employee AS t1,     employee AS t2WHERE t1.income < t2.income   OR (t1.income = t2.income AND t1.name <= t2.name)GROUP BY t1.name, t1.incomeORDER BY rank;

查询结果为:

完成小任务 2

找出中位数的排名数字:

SELECT (COUNT(*) + 1) DIV 2 as rankFROM employee;

查询结果为:

完成小任务 3

SELECT income AS medianFROM (SELECT t1.name, t1.income, COUNT(*) AS rank      FROM employee AS t1,           employee AS t2      WHERE t1.income < t2.income         OR (t1.income = t2.income AND t1.name <= t2.name)      GROUP BY t1.name, t1.income      ORDER BY rank) t3WHERE rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)

查询结果为:

至此,我们就找到了如何从一组数据中获得中位数的方法。

方法二

下面,来介绍另外一种优化排名语句的方法。

我们都知道如何给一组数据做排序操作,在本例中,实现方法如下:

SELECT name, incomeFROM employeeORDER BY income DESC

查询结果为:

那我们可不可以更进一步,对查询出的结果加一列,这一列的数据为排名呢?

我们可以通过 3 个自定义变量的方法来实现这一目标:

第一个变量用来记录当前行数据的收入

第二个变量用来记录上一行数据的收入

第三个变量用来记录当前行数据的排名

SET @curr_income := 0;SET @prev_income := 0;SET @rank := 0;SELECT `name`,       @curr_income := income                                      AS income,       @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank,       @prev_income := @curr_income                                AS dummyFROM employeeORDER BY income DESC

查询结果如下:

然后再找出中位数的排名数字,进一步找出收入的中位数:

SET @curr_income := 0;SET @prev_income := 0;SET @rank := 0;SELECT income AS medianFROM (SELECT `name`,             @curr_income := income                                      AS income,             @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank,             @prev_income := @curr_income                                AS dummy      FROM employee      ORDER BY income DESC) AS t1WHERE t1.rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)

查询结果为:

至此,我们找了两种方法来解决中位数的问题。撒花。

以上就是在 MySQL 中如何计算一组数据的中位数的详细内容,更多请关注其它相关文章!

数据 中位数 方法 结果 查询 收入 任务 变量 一行 数字 语句 排序 公司 内容 至此 不同 复杂 可不 更进一步 三个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技创新与互联网经济 新华互联网科技学院 互联网的科技创新 杭州互联网科技公司 科技互联网公司logo 左右互联网络科技 互联网科技热点资讯 金融科技与互联网金融相同和不同 互联网大会黑科技排名 重庆互联网医院沙龙医盟信息科技 互联网与医疗科技 内蒙古九一互联网科技 黑科技 体验场景 互联网大会 南通创西澳互联网科技有限公司 智帮互联网科技公司最近动向 广州千川互联网科技有限公司 杭州披云加互联网科技有限公司 工业互联网科技成果转化 国产互联网科技公司 亚光科技低轨卫星互联网 咖啡 百单网互联网科技有限公司怎么样 科技互联网公司装修 深圳天众互联网科技公司 互联网科技大会 银川新华互联网科技职业技术培训学校图片 互联网科技教育视频 成都铂石互联网科技做什么的 福仕德教育科技互联网 高科技和互联网的现代国家
0