gpt4 book ai didi

PostgreSQL 如何根据另一个表上的插入对一个表的列进行平均

转载 作者:行者123 更新时间:2023-12-03 22:39:12 25 4
gpt4 key购买 nike

所以这是我的问题,我有这个表提供者的列 averageRating 取决于保存在表评论中的用户的评分

我想要的是每当插入新评论时触发的功能

因此,使用 provider_id 在评论表上插入评论
=> 对具有相同 provider_id 的提供者的评分进行平均的函数
=>
更新 provider 表上的 averageRating

类似的东西

CREATE TRIGGER updateAvg
AFTER INSERT OR UPDATE ON reviews
FOR EACH ROW
UPDATE providers.averageRating SET review.rating = (SELECT AVG(rating) FROM reviews)

最佳答案

要直接回答您的问题,请引用 postgres 文档 https://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html 您必须创建一个函数来执行触发器。

CREATE FUNCTION update_average_rating()
RETURNS void
LANGUAGE plpgsql as $$
BEGIN
UPDATE providers SET averageRating = AVG(rating)
FROM reviews
WHERE providers.id = reviews.provider_id
AND NEW.provider_id = reviews.provider_id;
END;
$$;

CREATE TRIGGER updateAvg
AFTER INSERT OR UPDATE ON reviews
FOR EACH ROW
EXECUTE PROCEDURE update_average_rating();

然而,似乎更好的解决方案是使用模式设计来解决这个问题。无论您需要在何处显示您的平均评分,都应该是取平均值的 View 的一部分,以便您可以最大限度地减少数据库性能的实际成本,并根据需要检索所需的值。

关于PostgreSQL 如何根据另一个表上的插入对一个表的列进行平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52629961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com