【问题标题】:Postgres ratio_to_report functionPostgres ratio_to_report 函数
【发布时间】:2016-06-28 19:59:57
【问题描述】:

谁能告诉我如何在 Postgres 数据库中安装分析函数,尤其是 ratio_to_report 函数?

我尝试在 postgres 提供的模块中进行搜索,但没有看到包含该函数的模块。

【问题讨论】:

  • 我相信这个功能是 Oracle 特有的。但是,您可以使用简单的数学和sum() 函数实现相同的行为

标签: sql postgresql window-functions


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 2017-05-21
    • 2020-07-17
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2020-10-02
    相关资源
    最近更新 更多