PERCENTILE_COUNT函數用於計算精確的百分位元,採用線性插值演算法,對指定列升序排列,返回精確的第percentile位百分數。
命令格式
-- 計算精確的百分位元
PERCENTILE_CONT(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>])
-- 計算視窗中精確的百分位元
PERCENTILE_CONT(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>]) OVER ([partition_clause] [orderby_clause])參數說明
col_name:必填。值為 DOUBLE 類型或 DECIMAL 類型的列。
percentile:必填。需要計算的百分位元。DOUBLE類型常量,取值在[0,1]範圍內。
isIgnoreNull:可選。是否忽略NULL值。BOOLEAN類型常量,預設為TRUE。若取值為FALSE,排序時NULL值會作為最小值。
partition_clause及orderby_clause:詳情請參見視窗函數。
傳回值說明
返回計算的百分位元值,類型為DOUBLE。
使用樣本
樣本1:忽略NULL值,計算視窗中精確的百分位元。
SELECT PERCENTILE_CONT(x, 0) OVER() AS min, PERCENTILE_CONT(x, 0.01) OVER() AS percentile1, PERCENTILE_CONT(x, 0.5) OVER() AS median, PERCENTILE_CONT(x, 0.9) OVER() AS percentile90, PERCENTILE_CONT(x, 1) OVER() AS max FROM VALUES(0D),(3D),(NULL),(1D),(2D) AS tbl(x) LIMIT 1; -- 返回結果。 +------------+-------------+------------+--------------+------------+ | min | percentile1 | median | percentile90 | max | +------------+-------------+------------+--------------+------------+ | 0.0 | 0.03 | 1.5 | 2.7 | 3.0 | +------------+-------------+------------+--------------+------------+樣本2:不忽略NULL值則排序時NULL值作為最小值,計算視窗中精確的百分位元。
SELECT PERCENTILE_CONT(x, 0, false) OVER() AS min, PERCENTILE_CONT(x, 0.01, false) OVER() AS percentile1, PERCENTILE_CONT(x, 0.5, false) OVER() AS median, PERCENTILE_CONT(x, 0.9, false) OVER() AS percentile90, PERCENTILE_CONT(x, 1, false) OVER() AS max FROM VALUES(0D),(3D),(NULL),(1D),(2D) AS tbl(x) LIMIT 1; -- 返回結果。 +------------+-------------+------------+--------------+------------+ | min | percentile1 | median | percentile90 | max | +------------+-------------+------------+--------------+------------+ | NULL | 0.0 | 1.0 | 2.6 | 3.0 | +------------+-------------+------------+--------------+------------+
相關函數
PERCENTILE_CONT函數屬於彙總函式或視窗函數。