在 MySQL 中,如何计算一组数据的中位数


本文摘自PHP中文网,作者藏色散人,侵删。

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

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

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

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

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

方法一

创建测试表

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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

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

1

2

3

4

5

6

7

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;

查询结果为:

492a81f0598eb5622f488d41ac30bdf.png

完成小任务 2

找出中位数的排名数字:

1

2

SELECT (COUNT(*) + 1) DIV 2 as rank

FROM employee;

查询结果为:

210205328ff0784952f3dfa5b67f612.png

完成小任务 3

1

2

3

4

5

6

7

8

9

SELECT income AS median

FROM (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) t3

WHERE rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)

查询结果为:

阅读剩余部分

相关阅读 >>

mysql 中workbench报错怎么办

总结数据库事务与 mysql 事务

如何修改mysql列名称

mysql可以做什么

mysql事务回滚演示详解

mysql外键使用详解

mysql只能做小项目?是时候说几句公道话了!

mysql收费吗

mysql主键可以为空吗?

关于msyql事务隔离你要知道

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...