PERCENTILE_DISC [analytic]
一个逆分布函数,在此函数中,对于每行,PERCENTILE_DISC
将返回
窗口内每个分区中的一组值中落入指定百分位的值。 PERCENTILE_DISC()
假设一个离散分布数据模型。 NULL
值将被忽略。
PERCENTILE_DISC
会检查每组中的累计离散值,直到找到大于或等于指定百分位的值。Vertica 会计算每一行的百分位,PERCENTILE_DISC
会输出 WITHIN GROUP(ORDER BY)
列的第一个值,其 CUME_DIST
(累计离散)值大于等于实参 FLOAT
值(如 0.4
):
PERCENTILE_DIST(0.4) WITHIN GROUP (ORDER BY salary) OVER(PARTITION BY deptno)...
给定以下查询:
SELECT CUME_DIST() OVER(ORDER BY salary) FROM table-name;
最小的大于 0.4 的 CUME_DIST
值也为 PERCENTILE_DISC
。
行为类型
不可变语法
PERCENTILE_DISC ( percentile ) WITHIN GROUP (
ORDER BY expression [ ASC | DESC ] ) OVER (
[ window-partition-clause ] )
参数
- percentile
- 百分位值,为 0 到 1(包含)范围内的
FLOAT
常数。 -
WITHIN GROUP(ORDER BY expression)
- 指定如何对每个组内的数据进行排序。
ORDER BY
仅使用数据类型为INTEGER
、FLOAT
、INTERVAL
或NUMERIC
的列/表达式。NULL
值将被丢弃。WITHIN GROUP(ORDER BY)
子句不能保证 SQL 结果的顺序。要对最终结果进行排序,请使用 SQLORDER BY
子句集。 ASC | DESC
- 将排序顺序指定为升序(默认值)或降序。
OVER()
- 请参阅分析函数
示例
该查询会计算威斯康星和哥伦比亚区的前 300 位客户的每组的第 20 个百分值年收入。
=> SELECT customer_state, customer_key, annual_income,
PERCENTILE_DISC(.2) WITHIN GROUP(ORDER BY annual_income)
OVER (PARTITION BY customer_state) AS PERCENTILE_DISC
FROM customer_dimension
WHERE customer_state IN ('DC','WI')
AND customer_key < 300
ORDER BY customer_state, customer_key;
customer_state | customer_key | annual_income | PERCENTILE_DISC
----------------+--------------+---------------+-----------------
DC | 104 | 658383 | 417092
DC | 168 | 417092 | 417092
DC | 245 | 670205 | 417092
WI | 106 | 227279 | 227279
WI | 127 | 703889 | 227279
WI | 209 | 458607 | 227279
(6 rows)