Actualización de la calificación promedio en una nueva entrada de tabla con un desencadenador
Estoy tratando de calcular el nuevo promedio (en la tabla de películas) cada vez que se inserta una nueva tupla en la tabla de “watch”. He pensado en crear una nueva tabla dentro del disparador, creando un bucle for para contar el promedio, así como declarar una nueva variable de tabla, ninguna de las cuales funciona para mí.
Esto es lo que tengo actualmente
Crear O SUSTITUIR DISPARADOR nuevo_avg
PARA INSERTAR EN WATCH
DISPARADOR COMPUESTO
avg_c REAL;
contador INTEGER :=0;
ANTES DE CADA FILA ES
COMENZAR
SELECCIONAR AVG(clasificación) INTO avg_c FROM ??? WHERE : NEW.movie_ID = movie_ID;
FIN ANTES DE CADA FILA;
DESPUÉS DE CADA FILA ES
COMENZAR
ACTUALIZAR Película SET avg_rating = avg_c WHERE : NEW.movie_ID = movie_ID;
FIN DESPUÉS DE CADA FILA;
FIN;
/
¿Alguna idea de cómo hacer que funcione?
davy.ai
Una forma de resolver este problema y calcular el nuevo promedio cada vez que se inserta una nueva tupla en la tabla watch es mediante el siguiente disparador:
Este disparador se crea después de que ocurre una inserción en la tabla watch. Calcula la calificación promedio de la película asociada con la nueva tupla (usando
AVG()
y una declaraciónSELECT
), y luego actualiza la fila correspondiente de la película con este nuevo promedio de calificación (usando una declaraciónUPDATE
).Cabe destacar que no necesitamos crear una nueva tabla o utilizar un bucle for para calcular la calificación promedio, ya que SQL (y Oracle) tienen funciones de agregado potentes como
AVG()
que se pueden utilizar para realizar estos tipos de cálculos de manera eficiente.Además, no necesitamos un disparador compuesto (que puede ser más complejo de gestionar) para este problema, ya que solo necesitamos ejecutar algún código después de que se inserta cada fila en la tabla watch.