median函数的使用方法_如何使用逆分布函数模拟MEDIAN()聚合函数
median函数的使用方法
一些数据库足够强大,可以实现MEDIAN()
聚合函数。 请记住, MEDIAN()
与MEAN()
或AVG()
(平均值)略有不同(并且通常更有用)。
虽然平均值是按SUM(exp) / COUNT(exp)
,但MEDIAN()
告诉您样本中所有值的50%都比MEDIAN()
而集合中的其他50%都小于MEDIAN()
MEDIAN()
。
因此,换句话说,如果您执行以下查询:
WITH t(value) AS (SELECT 1 FROM DUAL UNION ALLSELECT 2 FROM DUAL UNION ALLSELECT 3 FROM DUAL
)
SELECTavg(value),median(value)
FROMt;
……那么平均值和中位数是相同的:
avg median
2 2
但是,如果您这样严重扭曲数据:
WITH t(value) AS (SELECT 1 FROM DUAL UNION ALLSELECT 2 FROM DUAL UNION ALLSELECT 100 FROM DUAL
)
SELECTavg(value),median(value)
FROMt;
然后,您的平均值也会出现偏差,而中位数仍将指示样本中大多数值的位置
avg median
34.333 2
上面的示例在统计上当然是微不足道的,但是如果您拥有更多数据,则可以轻松地看到这种影响是戏剧性的且相关的:
图像许可证CC-BY-SA 3.0。 由Cmglee上传到Wikipedia
偏斜效应在统计中非常重要,为了对任何事物做出有趣的主张,使用百分位通常比使用平均值更有用。 以一个国家的平均收入与中位数收入为例。 尽管美国(以及许多其他国家) 的平均收入一直在稳定增长, 但在过去十年中 , 中位数收入却有所下降 。 这是由于财富越来越严重地向超级富翁倾斜。
该博客不是关于政治的,而是关于Java和SQL的,因此让我们回到计算实际情况。
在SQL中使用分位数
正如我们之前所见, MEDIAN()
将样本分为两个大小相等的组,并在这两个组之间“取值”。 此特定值也称为第50个百分位数,因为样本中所有值的50%都小于MEDIAN()
。 因此,我们可以建立:
MIN(exp)
:0-百分位数MEDIAN(exp)
:第50个百分点MAX(exp)
:100%
以上所有都是百分位数的特殊情况,虽然所有SQL数据库(和SQL标准)都支持MIN()
和MAX()
,但SQL标准不支持MEDIAN()
,而以下jOOQ数据库仅支持MEDIAN()
:
- BR
- 数据库
- Oracle
- Sybase SQL Anywhere
在SQL标准中,还有另一种计算MEDIAN()
,以及通常计算任何百分位数的方法, 因为PostgreSQL 9.4在PostgreSQL中也使用…
有序集合聚合函数
有趣的是,除了窗口函数外 ,您还可以为某些聚合函数指定ORDER BY
子句,这些聚合函数根据有序集聚合数据。
一个这样的函数是SQL标准percentile_cont
函数,该函数将百分位数作为参数,然后接受另一个以ORDER BY
子句作为参数的WITHIN GROUP
子句。 这些特定的有序集函数也称为逆分布函数 ,因为我们要查找样本中所有值的分布中特定百分位数的位置( 如果您不担心数学,请查看Wikipedia文章 )
因此,在PostgreSQL 9.4+中,可以像下面这样模拟MEDIAN()
函数:
WITH t(value) AS (SELECT 1 UNION ALLSELECT 2 UNION ALLSELECT 100
)
SELECTavg(value),percentile_cont(0.5) WITHIN GROUP (ORDER BY value)
FROMt;
这个有趣的语法是标准化的,并且可能由Oracle的LISTAGG()所知,该语法允许将值聚合为串联的字符串:
WITH t(value) AS (SELECT 1 FROM DUAL UNION ALLSELECT 2 FROM DUAL UNION ALLSELECT 100 FROM DUAL
)
SELECTlistagg(value, ', ') WITHIN GROUP (ORDER BY value)
FROMt;
该查询简单地产生:
listagg
---------
1, 2, 100
附带说明一下: LISTAGG()
当然是完全没用的,因为它返回VARCHAR2
,在Oracle中它再次具有最大长度4000。 无用…
开箱即用的仿真
与往常一样,jOOQ将开箱即用地模拟这些事情。 您可以使用DSL.median()
函数,也可以使用即将推出的jOOQ 3.6和新的DSL.percentileCont()
函数来产生相同的值:
DSL.using(configuration).select(median(T.VALUE),percentileCont(0.5).withinGroupOrderBy(T.VALUE)).from(T).fetch();
翻译自: https://www.javacodegeeks.com/2015/01/how-to-emulate-the-median-aggregate-function-using-inverse-distribution-functions.html
median函数的使用方法
median函数的使用方法_如何使用逆分布函数模拟MEDIAN()聚合函数相关推荐
- 如何使用逆分布函数模拟MEDIAN()聚合函数
一些数据库足够强大,可以实现MEDIAN()聚合函数. 请记住, MEDIAN()与MEAN()或AVG() (平均)略有不同(并且通常更有用). 虽然平均值是按SUM(exp) / COUNT(ex ...
- offset函数的使用方法_有点麻烦:使用Excel OFFSET函数
offset函数的使用方法 That's my dad in the picture, proudly holding the catch of the day. He tried to teach ...
- python函数的使用方法_百度资讯搜索_python函数的使用方法
金生水起程序猿 2020年11月22日 11:23函数语法格式及调用参数:默认值.元组和字典可变参数的使用全局变量和局部变量作用域,局部变量如何升级为全局变量函数是可重复使用的,实现单一功能的代码块. ...
- java min 函数的使用方法_【Python】Java程序员学习Python(五)— 函数的定义和使用...
不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...
- mysql中乘法的函数的使用方法_利用MySQL 的GROUP_CONCAT函数实现聚合乘法
MySQL 聚合函数里面提供了加,平均数.最小,最大等,可是没有提供乘法,我们这里来利用MYSQL现有的GROUP_CONCAT函数实现聚合乘法. 先创建一张演示样例表:CREATE TABLE `t ...
- python函数分几种_简单了解Python中的几种函数
python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...
- 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数
高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...
- codeblocks printf函数打印不出来_最全C语言基本程序交互函数之输出到屏幕
前言 上一栏目主要讲解了各种数据类型的知识,大家先闭眼回顾一下数据类型的知识哦.本章节主要内容是讲解程序的基本交互设计之程序的输出.程序和人交互无非就是通过外设进行输入信息,C语言中基本的交互的基本流 ...
- oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数
开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车.我坐在后座看到前面一大妈跑步,很猥琐的对同学说:"你看前面那个肥婆跑得屁股都甩圆了!"这货沉默了一下.当我们和大妈擦身而过 ...
- oracle 聚合函数 条件,Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成...
HAVING主要用于对分组后的数据进行过滤, 一般我们在其后接聚合函数(SUM,COUNT等), 除此之外我们还可以用GROUP BY后面的字段组成HAVING后的过滤条件. SQL> sele ...
最新文章
- java运算符-逻辑、三元运算符
- allgro显示网络名称_相同的4G网络,为什么你的网速总是慢?知道这3点原因,网速翻倍...
- 运用类CL_SALV_TABLE实现alv
- spark发行版笔记9
- boost::geometry::detail::tupled_output_has用法的测试程序
- 洛谷 - P4012 深海机器人问题(最大费用最大流)
- 云效Codeup代码评审中的代码协同
- 如何修改SQL Server 2000身份验证模式和系统管理员
- ArcGiS/ArcInfo/ArcEditor/ArcMap/ArcView的区别
- PHP 图片上传类 缩略图
- 性能优化 - 之一 (C/C++)
- 波士顿房价预测python决策树_机器学习·波士顿房价预测模型
- Asp.Net前台页面调用后台cs变量
- Typora 下载方法(windows/ linux)
- [Windows] 专业的家谱族谱制作软件My Family Tree v10.3.4
- 重磅!《中华人民共和国个人信息保护法》今日起施行!
- java运维工程师简历_运维工程师个人简历怎么写?
- 2020 Linux系统应用基础教程 期末复习【整理】 第五章 磁盘文件与目录管理
- php远程登录linux,如何远程连接linux桌面
- C语言加减乘除运算符