首批通过分布式安全可靠测评,为关键业务系统打造
PERCENTILE_DISC
更新时间:2025-08-24 11:03:19
描述
该函数根据一个百分位值和指定排序规范,返回大于或等于百分位值的最小累积分布值(相对于同一排序规范)的值。在计算中忽略空值。
说明
- 作为分析函数使用时,需要使用
OVER子句定义窗口进行计算。它对一组行的集合进行计算并返回多个值。 - 作为聚合函数使用时,该函数对一组行的集合进行聚合计算,结果只能返回一个值,此时不需要加
OVER子句。
语法
PERCENTILE_DISC(expr1) WITHIN GROUP (ORDER BY expr2 [ DESC | ASC ])
[ OVER (query_partition_clause) ]
参数解释
| 参数 | 说明 |
|---|---|
| expr1 | 指定百分位的值,是一个数值数据类型的常量,取值范围为 [0,1]。 |
| expr2 | 指定用于排序和计算百分比的表达式,数据类型属于数值类型或日期时间类型。 |
| DESC | ASC | 指定列表的排序方式,为可选项。
|
| OVER | 使用 OVER 子句定义窗口进行计算。详细信息请参见 分析函数说明。 |
返回类型
返回与参数 expr2 相同的数据类型。
示例
现有已创建的表 tbl1。
obclient> SELECT * FROM tbl1;
+------+------+------+------+
| COL1 | COL2 | COL3 | COL4 |
+------+------+------+------+
| 1 | A1 | 8 | 12 |
| 1 | A2 | 10 | 15 |
| 1 | A3 | 11 | 16 |
| 2 | B1 | 9 | 14 |
| 2 | B2 | 10 | 15 |
| 2 | B3 | 8 | 13 |
| 2 | B4 | 11 | 16 |
| 3 | C1 | 8 | 18 |
| 3 | C2 | 9 | 16 |
| 3 | C3 | 10 | 15 |
| 3 | C4 | 11 | 12 |
| 3 | C5 | 12 | 10 |
+------+------+------+------+
12 rows in set
聚合函数示例
计算列 col4 的离散百分比中位数。
obclient> SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY col4) "PERCENTILE_DISC" FROM tbl1;
+-----------------+
| PERCENTILE_DISC |
+-----------------+
| 15 |
+-----------------+
1 row in set
分析函数示例
按列 col1 分组,计算列 col4 的离散百分比中位数。
obclient> SELECT col1,col4,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY col4) OVER(PARTITION BY col1) "PERCENTILE_DISC"
FROM tbl1;
+------+------+-----------------+
| COL1 | COL4 | PERCENTILE_DISC |
+------+------+-----------------+
| 1 | 12 | 15 |
| 1 | 15 | 15 |
| 1 | 16 | 15 |
| 2 | 14 | 14 |
| 2 | 15 | 14 |
| 2 | 13 | 14 |
| 2 | 16 | 14 |
| 3 | 18 | 15 |
| 3 | 16 | 15 |
| 3 | 15 | 15 |
| 3 | 12 | 15 |
| 3 | 10 | 15 |
+------+------+-----------------+
12 rows in set