如何用PERCENTILE_CONT函数在SQL中求每组数据的中位数?

2026-05-07 12:230阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1031个文字,预计阅读时间需要5分钟。

如何用PERCENTILE_CONT函数在SQL中求每组数据的中位数?

《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中求每组数据的中位数?

《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 中按组算中位数的正确写法

用聚合形式最简洁,且结果确定。

阅读全文
标签:聚合函数