在 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时常闪退的问题解决办法分享(图)

mysql怎么删除数据

mysql 中文乱码解决办法

mysql数据库服务器安装与配置教程

mysql如何删除重复数据

mysql中regexp_like()函数的例子解析

mysql实现查看与创建以及删除索引的方法介绍

mysql通配符如何查询字段

mysql优化之mysql慢查询操作介绍

mysql数据库的基础知识

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


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

数据库系统概念 第6版

机械工业出版社

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



打赏

取消

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

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

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

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

评论

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