Postgres ratio_to_report函数

4

请问有人能告诉我如何在Postgres数据库中安装分析函数,特别是ratio_to_report函数吗?

我尝试在Postgres提供的模块中搜索,但是我没有找到包含该函数的模块。


我认为这个函数是Oracle特定的。但是,您可以使用简单的数学和sum()函数实现相同的行为。 - Kamil Gosciminski
1个回答

9

RATIO_TO_REPORT

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

您根本不需要导入特定的函数。使用窗口化的SUM,可以实现Postgresql等效功能:

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               ║
╚═════╩══════╩═══════════╩═════════════════╝

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接