0

我有两个数据库表,其中一个我希望其中一个单元格等于另一个表中的行数乘以特定数字,例如 2000。

因此,例如,如果表 1 中有 10 行,我希望表 2 中的一个单元格是 (2000 x 10) 的总和。

我怎样才能做到这一点?


我想要达到的目标:

我想做的是为虚拟公司创建一种银行数据库。数据库中的一个表将从网站上的表格中收集值,然后这些值将被放入该表中,并显示为每个“员工”的数据,例如利润、成本等。

第二个表将汇总“员工”以创建整个公司的数据。

例如

在“员工”表中,可能有一个名为“燃料成本”的列。在公司表中会有一个名为“总燃料成本”的列,它等于所有员工燃料成本的总和,然后会显示在网站上。

4

4 回答 4

2

triggers您可以通过或一个过程 SQL(函数、存储过程)来实现自动更新值。某些 RDBM 具有允许您安排程序运行时间的代理。

一个触发器的例子MySQL是:

CREATE TRIGGER my_table_trig AFTER INSERT ON my_table
  FOR EACH ROW
  BEGIN
    UPDATE my_table_total SET total_rows = (SELECT count(*) FROM my_table)*2000;
  END;
于 2013-07-16T19:51:18.567 回答
1

听起来您正在尝试将 MySQL 用作电子表格,而这确实是错误的方法。如果这是您需要的结果,只需在您的应用程序中查询select count(*) from table2并乘以 2000。

我的回答真的是:“你问错了问题。重新考虑你想要做什么。”

根据您修改后的问题,我的意思是:不要为了保持最新摘要而不断更新其他表格。没有必要这样做。只需在您希望在 Web 应用程序中查看摘要数据的地方执行类似的操作select count(*) from detail_table(可能带有条件或类似的东西)。WHERE

与维护一个额外的表相比,这是一种获取所需信息的简单得多的方法。COUNT(*)如果您的明细表中的数据量如此之多,以至于每次您需要该总数时运行一个或类似的查询将是压倒性的性能拖累,您才应该费心保留汇总表。

换句话说,让数据库完成对事物进行排序和汇总的工作。

于 2013-07-16T20:05:04.017 回答
0

您可以创建一个临时表并使用 count 函数获取行数:

CREATE TEMPORARY TABLE sum_table ENGINE=MyISAM  ( SELECT SUM(2000 * COUNT(*)) `total` FROM `other_table`);

现在您可以查询 sum_table

于 2013-07-16T19:46:40.077 回答
0

不确定我是否理解你的问题。但这是你想要的吗?

Update table
    set columnName = SUM(2000 * (select Count(*) from table2))
于 2013-07-16T19:47:57.823 回答