0

我在创建触发器时遇到了一些问题,该触发器将使用第一个表中的平均值更新第二个表中的值。由于我对sqlite语句不是很熟悉,也许你们可以帮助我。

这是我的问题:我有一张桌子 table_1

表 1 说明

和另一个表 table_2

在此处输入图像描述

我想要的是table_2“average_value”字段用table_1中具有相同字段的值的平均值进行更新。

在这种特殊情况下,表 2 中的 aveage_value 字段如下所示: 5 - 对于 field_a 8 - 对于 field_b 0 - 对于 field_c

任何建议都会对我有很大帮助!谢谢你。

4

1 回答 1

3
  1. 要动态计算特定字段的平均值,请使用以下查询:

    SELECT AVG(value)
    FROM table_1
    WHERE field = 'field_a';
    
  2. 如果你想要一个看起来像你的视图table_2,你可以这样定义它:

    CREATE VIEW view_2 AS
    SELECT field,
           AVG(value) AS average_value
    FROM table_1
    GROUP BY field;
    
  3. 如果你真的想table_2成为一个实际的表,你可以这样计算平均值:

    UPDATE table_2
    SET average_value = (SELECT AVG(value)
                         FROM table_1
                         WHERE table_1.field = table_2.field);
    
  4. 如果您想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。)

于 2013-07-26T20:01:43.640 回答