【问题标题】:PostgreSQL task: trigger to calculate averagePostgreSQL 任务:触发计算平均值
【发布时间】:2020-02-25 23:08:12
【问题描述】:

我需要帮助解决以下问题。

让两个表和它们之间的关系:

CREATE TABLE A (
    id SERIAL PRIMARY KEY,
    val REAL
);

CREATE TABLE B (
    id SERIAL PRIMARY KEY,
    val REAL
);

CREATE TABLE A_B (
    a_id INT NOT NULL,
    b_id INT NOT NULL,
    FOREIGN KEY (a_id) REFERENCES A (id) ON DELETE CASCADE,
    FOREIGN KEY (b_id) REFERENCES B (id) ON DELETE CASCADE
);

我需要设置 B (val),以便当且仅当它们之间的关系存在于 A_B 中时,它始终是所有 A (val) 的平均值。如何使用触发器呢?感谢语法,抱歉。

【问题讨论】:

  • 如果表 b 中的数据有点陈旧也没关系,我建议使用物化视图。

标签: sql postgresql group-by database-trigger


【解决方案1】:

我建议创建一个视图来公开这些派生信息。实际上存储它没有什么意义,并且保持完整性将是乏味的。

create view view_b as
select b.id, avg(a.val) val
from b
left join a_b ab on ab.b_id = v.id
left join a on a.id = ab.a.id
group by b.id

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2020-07-05
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多