MySQL如何计算数据中位数详解
发表于:2024-12-04 作者:千家信息网编辑
千家信息网最后更新 2024年12月04日,下文内容主要给大家带来MySQL如何计算数据中位数详解,这里所讲到的知识,与书籍略有不同,都是专业技术人员在与用户接触过程中,总结出来的,具有一定的经验分享价值,希望给广大读者带来帮助。要得到一组数据
千家信息网最后更新 2024年12月04日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安全错误
数据库的锁怎样保障安全
sql列出所有数据库
关系数据库基础期末考试
java读取数据库表的名字
网络安全扫描文件
德拓平台服务器
qq免费电子邮箱发信服务器
科技 互联网 怀念 纸质
系数运算的数据库软件
面向对象法软件开发方法
港口网络安全建设的建议
门禁数据库的建立
把数据库md5加密
宿迁品质联想服务器
国内的高科技互联网公司排名
ios软件开发 难
教育软件开发需要什么
网络安全制度相关内容
小学网络安全教育的视频
靖江大型网络技术参考价格
建设远程培训网络技术方案
丰镇手机软件开发
美国软件开发专业前景
计算机网络技术岗位认识
农业管理数据库
国内 云 服务器
云端的服务器
重庆潮流软件开发服务价格优惠
网络安全用电脑还是笔记本
怎么删掉vivo升级服务器提醒
c 三层架构批量删除数据库