【问题标题】:Using UDF for value of a column postgresql使用 UDF 作为 postgresql 列的值
【发布时间】:2021-02-08 04:15:50
【问题描述】:

假设我已经有 2 个表格,其中包含电影及其收视率。

CREATE TABLE public.movies (
movieid int4 NOT NULL,
averagerating float4 NULL,
title varchar(255) NOT NULL,
"year" int4 NULL,
CONSTRAINT movies_pkey PRIMARY KEY (movieid)
);

CREATE TABLE public.ratings (
movie_id int4 NOT NULL,
user_id int4 NOT NULL,
rating float4 NOT NULL,
timestmp varchar(255) NOT NULL,
CONSTRAINT ratings_pkey PRIMARY KEY (movie_id, user_id),
CONSTRAINT fk44trpo3u915t27ybt03ib4h0o FOREIGN KEY (movie_id) REFERENCES movies(movieid),
CONSTRAINT fk7ymub8kd95i2xlklgole3i684 FOREIGN KEY (user_id) REFERENCES usrs(userid)
);

目前movies中的averagerating列到处都是空的。我想将我的 UDF average_movie_rating 附加到此列

类似update movies set averagerating = average_movie_rating(movies.movieid)

这个函数:

create or replace function average_movie_rating(movieid integer)
returns float8 as $averagerating$
declare 
averagerating float8;
begin
select avg(r.rating) into averagerating from ratings r where r.movie_id = $1;
return averagerating;
end
$averagerating$ language plpgsql;

有可能吗?如果可以,我如何将这个 movieid 传递给函数?

【问题讨论】:

    标签: sql postgresql sql-update user-defined-functions


    【解决方案1】:

    除非出于性能原因需要,否则您应该在从数据库中选择时计算该值。如果必须持久化,请在 ratings 上使用触发器来修改 movies

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 2019-03-11
      相关资源
      最近更新 更多