【发布时间】:2016-06-28 19:59:57
【问题描述】:
谁能告诉我如何在 Postgres 数据库中安装分析函数,尤其是 ratio_to_report 函数?
我尝试在 postgres 提供的模块中进行搜索,但没有看到包含该函数的模块。
【问题讨论】:
-
我相信这个功能是 Oracle 特有的。但是,您可以使用简单的数学和
sum()函数实现相同的行为
标签: sql postgresql window-functions
谁能告诉我如何在 Postgres 数据库中安装分析函数,尤其是 ratio_to_report 函数?
我尝试在 postgres 提供的模块中进行搜索,但没有看到包含该函数的模块。
【问题讨论】:
sum() 函数实现相同的行为
标签: sql postgresql window-functions
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 ║
╚═════╩══════╩═══════════╩═════════════════╝
【讨论】: