【问题标题】:MySQL how to update aggregated table (based on another table) automatically?MySQL如何自动更新聚合表(基于另一个表)?
【发布时间】:2023-01-09 02:39:32
【问题描述】:

我在 MySQL 数据库中有一个表 (table1),其数据与此类似:

Category total_sold revenue profit
fruit 32 200 150
veggies 12 50 23
chips 23 170 110
fruit 43 300 180
chips 5 25 15

使用 sqlalchemy 通过 python 脚本定期将新数据插入表中(使用 Pandas 将 csv 文件附加到 mysql 表)。

我想使用查询创建一个基于类别的聚合表 (table2),并且我希望在向 table1 添加新记录时更新聚合。

例如在执行查询之后:

CREATE TABLE table2 AS
SELECT Category, AVG(total_sold) avg_sold, AVG(revenue) avg_revenue, AVG(profit) avg_profit
FROM table1
GROUP BY 1

我得到 table2 作为:

Category avg_sold avg_revenue avg_profit
fruit 37.5 250 165
veggies 12 50 23
chips 14 97.5 62.5

现在如果我向table1插入几条新记录,我怎样才能让table2自动更新呢? (根据所有 table1 记录重新计算所有聚合,包括新添加的记录)

我阅读了有关创建触发器的信息,但我不确定如何执行它或者它是否适用于这种情况。

我将不胜感激任何帮助。

【问题讨论】:

  • 您应该创建一个视图,而不是创建一个表。然后您可以从该视图中进行选择并始终获得最新的结果。
  • @forpas 我对视图不熟悉,但我会在线查看并尝试。感谢您的回答!
  • 这回答了你的问题了吗? How do I create a view in MySQL?

标签: mysql sql sqlalchemy innodb mysql-python


【解决方案1】:

MySQL 不支持“物化视图”。您必须自己进行汇总。建立一个单独的Summary Table并保持更新。一个简单的 IODKU 是进行维护的一种方法;该链接讨论了其他内容,例如当天数据的每晚批量更新。

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 2013-06-12
    • 2018-04-10
    • 1970-01-01
    • 2021-12-13
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多