请问有人能告诉我如何在Postgres数据库中安装分析函数,特别是ratio_to_report函数吗?
我尝试在Postgres提供的模块中搜索,但是我没有找到包含该函数的模块。
请问有人能告诉我如何在Postgres数据库中安装分析函数,特别是ratio_to_report函数吗?
我尝试在Postgres提供的模块中搜索,但是我没有找到包含该函数的模块。
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
输出:
╔═════╦══════╦═════════════════════╗
║ 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
输出:
╔═════╦══════╦═══════════╦═════════════════╗
║ 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 ║
╚═════╩══════╩═══════════╩═════════════════╝
sum()
函数实现相同的行为。 - Kamil Gosciminski