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()聚合函数相关推荐

  1. 如何使用逆分布函数模拟MEDIAN()聚合函数

    一些数据库足够强大,可以实现MEDIAN()聚合函数. 请记住, MEDIAN()与MEAN()或AVG() (平均)略有不同(并且通常更有用). 虽然平均值是按SUM(exp) / COUNT(ex ...

  2. offset函数的使用方法_有点麻烦:使用Excel OFFSET函数

    offset函数的使用方法 That's my dad in the picture, proudly holding the catch of the day. He tried to teach ...

  3. python函数的使用方法_百度资讯搜索_python函数的使用方法

    金生水起程序猿 2020年11月22日 11:23函数语法格式及调用参数:默认值.元组和字典可变参数的使用全局变量和局部变量作用域,局部变量如何升级为全局变量函数是可重复使用的,实现单一功能的代码块. ...

  4. java min 函数的使用方法_【Python】Java程序员学习Python(五)— 函数的定义和使用...

    不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...

  5. mysql中乘法的函数的使用方法_利用MySQL 的GROUP_CONCAT函数实现聚合乘法

    MySQL 聚合函数里面提供了加,平均数.最小,最大等,可是没有提供乘法,我们这里来利用MYSQL现有的GROUP_CONCAT函数实现聚合乘法. 先创建一张演示样例表:CREATE TABLE `t ...

  6. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  7. 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

    高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...

  8. codeblocks printf函数打印不出来_最全C语言基本程序交互函数之输出到屏幕

    前言 上一栏目主要讲解了各种数据类型的知识,大家先闭眼回顾一下数据类型的知识哦.本章节主要内容是讲解程序的基本交互设计之程序的输出.程序和人交互无非就是通过外设进行输入信息,C语言中基本的交互的基本流 ...

  9. oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数

    开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车.我坐在后座看到前面一大妈跑步,很猥琐的对同学说:"你看前面那个肥婆跑得屁股都甩圆了!"这货沉默了一下.当我们和大妈擦身而过 ...

  10. oracle 聚合函数 条件,Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成...

    HAVING主要用于对分组后的数据进行过滤, 一般我们在其后接聚合函数(SUM,COUNT等), 除此之外我们还可以用GROUP BY后面的字段组成HAVING后的过滤条件. SQL> sele ...

最新文章

  1. java运算符-逻辑、三元运算符
  2. allgro显示网络名称_相同的4G网络,为什么你的网速总是慢?知道这3点原因,网速翻倍...
  3. 运用类CL_SALV_TABLE实现alv
  4. spark发行版笔记9
  5. boost::geometry::detail::tupled_output_has用法的测试程序
  6. 洛谷 - P4012 深海机器人问题(最大费用最大流)
  7. 云效Codeup代码评审中的代码协同
  8. 如何修改SQL Server 2000身份验证模式和系统管理员
  9. ArcGiS/ArcInfo/ArcEditor/ArcMap/ArcView的区别
  10. PHP 图片上传类 缩略图
  11. 性能优化 - 之一 (C/C++)
  12. 波士顿房价预测python决策树_机器学习·波士顿房价预测模型
  13. Asp.Net前台页面调用后台cs变量
  14. Typora 下载方法(windows/ linux)
  15. [Windows] 专业的家谱族谱制作软件My Family Tree v10.3.4
  16. 重磅!《中华人民共和国个人信息保护法》今日起施行!
  17. java运维工程师简历_运维工程师个人简历怎么写?
  18. 2020 Linux系统应用基础教程 期末复习【整理】 第五章 磁盘文件与目录管理
  19. php远程登录linux,如何远程连接linux桌面
  20. C语言加减乘除运算符

热门文章

  1. 英语之形容词和副词规则
  2. 哈希值(hashCode)
  3. 摄影测量(tip1):空间前方交会与空间后方交会
  4. 用excel数据批量填充word表格
  5. 概率论考点之检验统计量(区间估计)
  6. 空间直线与球面相交算法
  7. 0-博客笔记导读目录(全部)-backup-20211121
  8. 无法定位序数XX于动态链接库XX.dll的解决的方法
  9. 各版本iphone重要参数
  10. 【asp.net core 系列】6 实战之 一个项目的完整结构