如何用PERCENTILE_CONT函数在SQL中求每组数据的中位数?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1031个文字,预计阅读时间需要5分钟。
《PERCENTILE_CONT》是标准SQL中计算中位数最直接的方法,但在不同数据库中的支持和语法细节差异很大——例如,PostgreSQL、Oracle和SQL Server(2012版)支持该功能,而BigQuery也支持。相比之下,MySQL和SQLite原生不支持此功能。
PERCENTILE_CONT 的基本用法和参数含义
该函数本质是「连续分布下的分位数插值」,中位数对应 0.5。它必须配合 OVER 子句使用,不能直接用于普通 GROUP BY;若要按组计算中位数,需用窗口函数 + 去重逻辑,或结合子查询/CTE。
-
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY column_name)是聚合形式(无OVER),仅在 PostgreSQL、Oracle、SQL Server 中可用,此时可直接搭配GROUP BY -
PERCENTILE_CONT(0.5) OVER (PARTITION BY group_col ORDER BY value_col)是窗口形式,返回每行对应的插值结果,不是每组一个值,需额外取每组首行 - 输入列必须为数值类型,
NULL会被自动忽略
PostgreSQL / Oracle 中按组算中位数的正确写法
用聚合形式最简洁,且结果确定。
本文共计1031个文字,预计阅读时间需要5分钟。
《PERCENTILE_CONT》是标准SQL中计算中位数最直接的方法,但在不同数据库中的支持和语法细节差异很大——例如,PostgreSQL、Oracle和SQL Server(2012版)支持该功能,而BigQuery也支持。相比之下,MySQL和SQLite原生不支持此功能。
PERCENTILE_CONT 的基本用法和参数含义
该函数本质是「连续分布下的分位数插值」,中位数对应 0.5。它必须配合 OVER 子句使用,不能直接用于普通 GROUP BY;若要按组计算中位数,需用窗口函数 + 去重逻辑,或结合子查询/CTE。
-
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY column_name)是聚合形式(无OVER),仅在 PostgreSQL、Oracle、SQL Server 中可用,此时可直接搭配GROUP BY -
PERCENTILE_CONT(0.5) OVER (PARTITION BY group_col ORDER BY value_col)是窗口形式,返回每行对应的插值结果,不是每组一个值,需额外取每组首行 - 输入列必须为数值类型,
NULL会被自动忽略
PostgreSQL / Oracle 中按组算中位数的正确写法
用聚合形式最简洁,且结果确定。

