-- Create a trigger function
CREATE OR REPLACE FUNCTION profile_update_avg_views_30d()
RETURNS TRIGGER AS $$
BEGIN
UPDATE profiles
SET avg_views_30d = (
SELECT AVG(views)
FROM videos
WHERE profile = NEW.user_id
AND posting_date >= CURRENT_DATE - INTERVAL '30 days'
)
WHERE user_id = NEW.user_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Create a trigger that fires after every update or insert on the videos table
CREATE TRIGGER profile_update_avg_views_30d_trigger
AFTER INSERT OR UPDATE ON profiles
FOR EACH ROW
EXECUTE FUNCTION profile_update_avg_views_30d();
-- Create a trigger function
CREATE OR REPLACE FUNCTION profile_update_avg_views_30d()
RETURNS TRIGGER AS $$
BEGIN
UPDATE profiles
SET avg_views_30d = (
SELECT AVG(views)
FROM videos
WHERE profile = NEW.user_id
AND posting_date >= CURRENT_DATE - INTERVAL '30 days'
)
WHERE user_id = NEW.user_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Create a trigger that fires after every update or insert on the videos table
CREATE TRIGGER profile_update_avg_views_30d_trigger
AFTER INSERT OR UPDATE ON profiles
FOR EACH ROW
EXECUTE FUNCTION profile_update_avg_views_30d();