Postgres ratio_to_report函数

Fra*_*lle 2 sql postgresql window-functions

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

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

Luk*_*zda 5

RATIO_TO_REPORT

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

您根本不需要导入特定功能。使用windowed的Postgresql等效项SUM

SELECT ID, val, 1.0 * val / NULLIF(SUM(val) OVER(),0) AS ratio_to_report
FROM tab
Run Code Online (Sandbox Code Playgroud)

SqlFiddleDemo

输出:

????????????????????????????????????
? id  ? val  ?   ratio_to_report   ?
????????????????????????????????????
?  1  ?  10  ? 0.16666666666666666 ?
?  2  ?  10  ? 0.16666666666666666 ?
?  3  ?  20  ? 0.3333333333333333  ?
?  4  ?  20  ? 0.3333333333333333  ?
????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

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

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

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               ?
????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)