RATIO_TO_REPORT是一個分析函數,用於計算某一列的值在指定分組中所佔的比率。
文法
RATIO_TO_REPORT(col) over ([partition by xxx]) ; col:需要查詢的列,如果該值為空白,則比率的值也為空白。[partition by xxx]:指定的分組,如果省略該子句,則會計算當前值占指定分組中所有值的比率。
樣本
準備測試表。
CREATE TABLE rtp ( a INT, b INT, c INT ); INSERT INTO rtp (a, b, c) VALUES (1, 5, 4), (1, 5, 6), (2, 3, 10), (2, 7, NULL);分析函數RATIO_TO_REPORT使用。
計算全表中b值的比例。
SELECT *, ratio_to_report(b) OVER () FROM rtp;返回結果如下:
a | b | c | ratio_to_report ---+---+----+----------------- 1 | 5 | 4 | 0.25 1 | 5 | 6 | 0.25 2 | 3 | 10 | 0.15 2 | 7 | | 0.35 (4 rows)對每個a的分組計算比例,計算每個分組內的b值占該組總和的比例。
SELECT *, ratio_to_report(b) OVER (PARTITION BY a) FROM rtp;返回結果如下:
a | b | c | ratio_to_report ---+---+----+----------------- 1 | 5 | 4 | 0.5 1 | 5 | 6 | 0.5 2 | 3 | 10 | 0.3 2 | 7 | | 0.7 (4 rows)