Postgres ratio_to_report函数

时间:2016-03-13 21:59:21

标签: sql postgresql window-functions

有人可以告诉我如何在Postgres数据库中安装分析函数,尤其是 ratio_to_report 函数吗?

我试图在postgres提供的模块中搜索,但我没有看到包含该功能的模块。

1 个答案:

答案 0 :(得分:5)

  

<强> RATIO_TO_REPORT

     

RATIO_TO_REPORT是一个分析函数。 它计算值与一组值之和的比率。如果expr的计算结果为null,则报告的比率值也会计算为null。

您根本不需要导入特定功能。 Postgresql等效使用窗口SUM

SELECT ID, val, 1.0 * val / NULLIF(SUM(val) OVER(),0) AS ratio_to_report
FROM tab

SqlFiddleDemo

输出:

╔═════╦══════╦═════════════════════╗
║ id  ║ val  ║   ratio_to_report   ║
╠═════╬══════╬═════════════════════╣
║  1  ║  10  ║ 0.16666666666666666 ║
║  2  ║  10  ║ 0.16666666666666666 ║
║  3  ║  20  ║ 0.3333333333333333  ║
║  4  ║  20  ║ 0.3333333333333333  ║
╚═════╩══════╩═════════════════════╝

要模拟PARTITION BY,您可以使用:

SELECT ID, val, category,
    1.0 * val / NULLIF(SUM(val) OVER(PARTITION BY category),0) AS ratio_to_report
FROM tab

SqlFiddleDemo2

输出:

╔═════╦══════╦═══════════╦═════════════════╗
║ id  ║ val  ║ category  ║ ratio_to_report ║
╠═════╬══════╬═══════════╬═════════════════╣
║  1  ║  10  ║ a         ║ 0.25            ║
║  2  ║  10  ║ a         ║ 0.25            ║
║  3  ║  20  ║ a         ║ 0.5             ║
║  4  ║  20  ║ b         ║ 1               ║
╚═════╩══════╩═══════════╩═════════════════╝