我在创建触发器时遇到一些问题,该触发器将使用第一个表中的平均值更新第二个表中的值。由于我对sqlite语句不是很熟悉,也许你们可以帮助我。
这是我的问题:我有一个表table_1
和另一个表table_2
我想要的是table_2“average_value”字段要使用table_1中具有相同字段的值的平均值进行更新。
在这种特殊情况下,表2中的aveage_value字段如下: 5 - 对于field_a 8 - 对于field_b 0 - 表示field_c
任何建议都会对我有所帮助!谢谢。
答案 0 :(得分:3)
要动态计算特定字段的平均值,请使用以下查询:
SELECT AVG(value)
FROM table_1
WHERE field = 'field_a';
如果你想要一个看起来像table_2
的视图,你可以这样定义:
CREATE VIEW view_2 AS
SELECT field,
AVG(value) AS average_value
FROM table_1
GROUP BY field;
如果你真的希望table_2
成为一个真正的表,你可以像这样计算平均值:
UPDATE table_2
SET average_value = (SELECT AVG(value)
FROM table_1
WHERE table_1.field = table_2.field);
如果您希望table_2
成为实际的表,并且只想更新那些已更改的值,请使用如下触发器:
CREATE TRIGGER update_average_value_after_insert
AFTER INSERT ON table_1
FOR EACH ROW
BEGIN
UPDATE table_2
SET average_value = (SELECT AVG(value)
FROM table1
WHERE table1.field = NEW.field)
WHERE field = NEW.field;
END;
(您还需要UPDATE
和DELETE
的类似触发器。)