oracle 计算中位数,SQL 如何计算每个分组的中位数
中位数是指一组数据排序以后,位于中间位置的数据值。如果数据个数是奇数,中位数就是最中间位置那个值;如果是偶数,则是中间位置那两个数的平均值。
怎么查询出数据分组以后每个组的中位数呢?
用SQL来解决这个问题是很有难度的!
SQL的集合是无序的,没有数据位置的概念,需要人为地造出行号,但是要对各分组独立编行号也困难。后来在SQL2003标准中加入了窗口函数,可以对分组编行号了,但是求各组中位数依然繁琐。
举个例子:现有成绩表SCORES数据如下,要求查出每科成绩的中位数。
COURSE
SCORE
History
68.5
History
79.0
History
82.5
History
88.0
History
93.5
Maths
75.5
Maths
83.0
Maths
85.0
Maths
95.5
查询出来的各科成绩中位数应该是:
COURSE
SCORE
History
82.5
Maths
84.0
以Oracle为例,用SQL写出来是这样:
WITH A AS
( SELECT COURSE, SCORE,
ROW_NUMBER()OVER ( PARTITION BY COURSE ORDER BY SCORE) AS RN,
COUNT(*) OVER (PARTITION BY COURSE) AS CNT
FROM SCORES ),
B AS
(SELECT * FROM A WHERE RN>(CNT-0.5)/2 AND RN
SELECT COURSE, AVG(SCORE) AS SCORE FROM B
GROUP BY COURSE
ORDER BY COURSE;
这里的A为每组数据加上组内行号并统计每组记录数,B查出位于每组中间位置的记录,最后从B里算出每组平均值,即为中位数。解题步骤比较多,这种SQL不好写。另外还有不用窗口函数的办法,语句就更加复杂了,这里不再列出。
集算器的SPL语言支持组内运算,也提供了中位数函数,解决这个问题就会简单很多,只需1行代码:
connect("mydb").query("select * from scores order by course, score").group(COURSE).new(~.COURSE,~.(SCORE).median():SCORE)
SPL 擅长解决这类分组子集和组内有序计算,请阅
、
、
集算器 SPL 是解决 SQL 难题的专业脚本语言,它语法简单,符合自然思维,是天然分步、层次清晰的面向过程计算语言。它采用与数据库无关的统一语法,编写的算法可在数据库间无缝迁移。它是桌面级计算工具,即装即用,配置简单,调试功能完善,可设置断点、单步执行,每步执行结果都可查看。请参阅
SPL也能很方便地嵌入到JAVA应用,可参考
。
具体使用方法可参考
。
oracle 计算中位数,SQL 如何计算每个分组的中位数相关推荐
- pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值、滚动中位数、滚动最大最小值、滚动加和等
pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值.滚动中位数.滚动最大最小值.滚动加和等 目录
- R语言使用epiDisplay包的summ函数计算向量数据在不同分组下的描述性统计汇总信息并可视化有序点图(名称、有效值个数、均值、中位数、标准差、最大值、最小值)
R语言使用epiDisplay包的summ函数计算向量数据在不同分组下的描述性统计汇总信息并可视化有序点图(名称.有效值个数.均值.中位数.标准差.最大值.最小值) 目录
- Oracle中计算年龄SQL语句
Oracle中根据生日计算年龄SQL语句? 算法一: select floor( MONTHS_BETWEEN(sysdate,birthday)/12) from dual;--从数据库中取值 se ...
- R语言使用epiDisplay包的summ函数计算向量数据在不同分组下的描述性统计汇总信息并可视化有序点图、使用main参数为可视化图像添加自定义标题(名称、有效值个数、均值、中位数、标准差、最大值)
R语言使用epiDisplay包的summ函数计算向量数据在不同分组下的描述性统计汇总信息并可视化有序点图.使用main参数为可视化图像添加自定义标题(名称.有效值个数.均值.中位数.标准差.最大值. ...
- Oracle中使用SQL根据出生日期精确计算年龄
Oracle中使用SQL根据出生日期精确计算年龄 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例): select XM,CSNY as 出生日期,-- extract函数用于提取日期 ...
- Oracle计算分组分位数
我们在进行分析过程中,经常会有计算某个特征的分位数这个需求.下面为大家介绍如何在oracle计算某一列数据的分位数. 需要求分位数的表结构如下: select * from test_lizhen; ...
- [20180914]oracle 12c 表 full_hash_value如何计算.txt
[20180914]oracle 12c 表 full_hash_value如何计算.txt --//昨天在12c下看表full_hash_value与11g的full_hash_value不同,不过 ...
- SQL语法之分组函数,分组查询(进阶5)and连接查询(sql92语法进阶6)
SQL语法体系学习笔记 SQL语法之基础查询(进阶1)and条件查询(进阶2) SQL语法之排序查询(进阶3)and常见函数(进阶4) SQL语法之分组函数,分组查询(进阶5)and连接查询(sql9 ...
- 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)
Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...
最新文章
- ajax .done 应该怎么写_软文推广的文章应该怎么写好呢
- vuepress 跑不起来?报错?空白页? res.getHeader is not a function?
- Spring boot日志关系
- ITK:为图像中标记区域的边界上色
- Angular compiler报的一个错误消息:Component XX is not part of any NgModule
- javaone_JavaOne 2015 –提交技巧和建议
- mysql 多实例 独立配置文件_三、安装配置多实例MYSQL5.6-多独立配置文件方法
- 建立了索引怎么使用_对MySQL索引的认识
- CMS 系统之 iframe 结构
- radius服务器mac_连如何抵御MAC攻击都不知道 过年还如何抵御三姑六婆的魔法攻击...
- 终于理解你的软件 搞那么多年了 (通用权限管理系统组件源码完善了7-8年)
- CentOS 系统修复
- svn和git 常用的命令
- java基础面经--下
- C1驾考成都胜利考场科目二经验
- vivo直播应用技术实践与探索
- 一名Java大佬跳槽之旅,离开京东,14面面试经验和收获
- 用机器学习颠覆环法自行车赛传统体验 岱凯野心可不只有这一点!
- 循序渐进实现仿QQ界面(三):界面调色与控件自绘
- 2022 Java 知识点总结
热门文章
- 4G(LTE)是如何实现智慧农业物联网的?
- 微服务升级优点_微服务–——定义, 原则 和 优点
- 无穷级数求和7个公式_大家看,用反证法判别级数敛散性(送微积分同学)!...
- (3.1)HarmonyOS鸿蒙单击事件4种写法
- 中奖名单模板_春分纪中奖名单出炉~才艺主公用“树叶阵法”致敬率土!
- Python进阶(上下文管理器与with语句)
- MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
- 隐藏响应的server,X-Powered-By
- ansible copy file
- hdu_5761_Rower Bo(xjb猜公式)