分析函数(RATIO_TO_REPORT)

RATIO_TO_REPORT是一个分析函数,用于计算某一列的值在指定分组中所占的比率。

语法

RATIO_TO_REPORT(col) over ([partition by xxx]) ; 
  • col:需要查询的列,如果该值为空,则比率的值也为空。

  • [partition by xxx]:指定的分组,如果省略该子句,则会计算当前值占指定分组中所有值的比率。

示例

  1. 准备测试表格。

    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);
  2. 分析函数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)