SQLite从一个表中选择平均值,并使用触发器更新另一个表中的平均字段

时间:2013-07-26 16:37:14

标签: sql sqlite triggers average

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

这是我的问题:我有一个表table_1

table 1 description

和另一个表table_2

enter image description here

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

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

任何建议都会对我有所帮助!谢谢。

1 个答案:

答案 0 :(得分: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;
    

    (您还需要UPDATEDELETE的类似触发器。)