当前位置: 首页 > java >正文

【Mysql】实现中位数计算

--需求:求一串数据的中位数,若共有偶数个数据则取中间两个数的平均值create table ta (sc int)insert into ta values(80),(90),(81),(72),(55),(60);-- 偶数条mysql> select * from ta order by sc;
+------+
| sc   |
+------+
|   55 |
|   60 |
|   72 |
|   80 |
|   81 |
|   90 |
+------+
6 rows in set (0.00 sec)-- 基本实现
SELECT avg(t1.sc) as median_val FROM ( 
SELECT @rownum:=@rownum+1 as row_number, d.sc 
FROM ta d, (SELECT @rownum:=0) r 
WHERE 1 
ORDER BY d.sc
) as t1, 
( 
SELECT count(*) as total_rows 
FROM ta d 
WHERE 1  
) as t2 
WHERE 1 
AND t1.row_number in ( floor((total_rows+1)/2), floor((total_rows+2)/2) );
+------------+
| median_val |
+------------+
|    76.0000 |
+------------+
1 row in set (0.03 sec)-- 增加筛选字段
alter table ta add na varchar(10);update ta set na='Bai' where mod(sc,2)=0;
update ta set na='Hei' where mod(sc,2)=1;mysql> select * from ta order by na,sc;
+------+------+
| sc   | na   |
+------+------+
|   60 | Bai  |
|   72 | Bai  |
|   80 | Bai  |
|   90 | Bai  |
|   55 | Hei  |
|   81 | Hei  |
+------+------+
6 rows in set (0.00 sec)-- 最终实现
SELECT t1.na,
avg(t1.sc) as median_val FROM ( 
SELECT case when @na<>na then @rownum:=1 else @rownum:=@rownum+1 end as row_number, d.sc ,@na:=d.na na
FROM (SELECT @rownum:=0) r ,
(select @na:='' ) n,
ta d
WHERE 1 
ORDER BY d.na,d.sc
) as t1, 
( 
SELECT na,count(*) as total_rows 
FROM ta d 
WHERE 1 
group by na 
) as t2 
WHERE 1 
and t1.na=t2.na
AND t1.row_number in ( floor((total_rows+1)/2), floor((total_rows+2)/2) )
group by t1.na;
+------+------------+
| na   | median_val |
+------+------------+
| Bai  |    76.0000 |
| Hei  |    68.0000 |
+------+------------+
2 rows in set (0.02 sec)
http://www.xdnf.cn/news/10974.html

相关文章:

  • 【教程§discuz!X2.5去除“powered by discuz!”方法小记§】
  • packetshaper产品学习
  • B2C大点名:国内B2C网站收集(更新至2009年6月2日)
  • AI 电商智能导购助手的新型产品交互形态设计和技术方案
  • C语言求最大公约数的三种方法
  • 下载和攻略之青空下的约定 この青空に約束を
  • 毕业论文格式如何快速修改
  • 社会工程学工具(信息安全)
  • 全志 a10 linux,全志A10处理器参数介绍
  • 网页设计与制作成品——基于HTML(品优购)电商购物商城项目设计与实现(html前端源码和论文设计)
  • vscode中写汇编 以及我所遇到的 File not found解决方法
  • html.partial的作用,Html.RenderPartial()与Html.Partial()区别
  • Blekko推出类Flipboard社交新闻网站ROCKZi
  • python定义一个数据自动去重的函数_110道Python面试题(真题小结)
  • 企业OA管理|基于SprinBoot+vue的企业OA管理系统(源码+数据库+文档)
  • 心理学推荐书籍——《色眼识人》
  • Clover 驱动文件夹_声卡驱动的另一个办法(ppleHDA Patcher软件说明)
  • 《当AutoScheduler遇见边缘端:Apache TVM如何重塑模型算子的极限》
  • HDFS中块状态分析
  • ntoskrnl.exe损坏或丢失的解决方式
  • 【转载】什么是网站监测?网站监测包括哪些方面?
  • 如何给ocx,dll控件进行数字签名
  • 按键精灵参考代码
  • 标准的I/O缓冲:全缓冲,行缓冲,无缓冲
  • 苹果服务器装系统教程视频教程,苹果“雪豹”服务器系统安装傻瓜教程(多图)...
  • 无需公网IP,使用MCSM面板一键搭建我的世界Minecraft服务器联机游戏
  • 完整的腾讯面试经过
  • PaintedSkin 一款解决Android App 换肤功能的框架
  • Windows无法找到mfc71u.dll文件解决方法
  • ERR_CONTENT_LENGTH_MISMATCH 直接node能访问 通过nginx代理无法访问