我有两个数据库表,其中一个我希望其中一个单元格等于另一个表格中的行数乘以特定数字,例如2000。
因此,例如,如果表1中有10行,我希望表2中的一个单元格是(2000 x 10)的总和。
我怎样才能实现这个目标?
我想要实现的目标:
我要做的是为虚拟公司创建一种银行数据库。数据库中的一个表将从网站上的表单中收集值,然后将这些值放入此表中,并显示为每个“员工”的数据,例如利润,成本等。
第二个表格将“员工”总计为公司整体创建数据。
E.g。
在“员工”表中可能会有一个名为“燃料成本”的列。 在公司表中会有一个名为“总燃料成本”的列,它将等于所有员工燃料成本的总和,然后这将显示在网站上。
答案 0 :(得分: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;
答案 1 :(得分:1)
听起来你正在尝试将MySQL用作电子表格,这确实是错误的做法。只需查询select count(*) from table2
并在您的应用程序中乘以2000,如果这是您需要的结果。
我的回答是:“你问的是错误的问题。重新思考你想做什么。”
根据您修改过的问题,我说:不要仅仅为了保持最新的摘要而不断更新附加表。没有必要这样做。只需执行类似select count(*) from detail_table
(可能带有WHERE
条件或某些条件)的内容,您可以在其中查看Web应用程序中的摘要数据。
获得所需信息比获取额外表格要简单得多。如果详细信息表中的数据量太大,以至于每次需要运行COUNT(*)
或类似查询时,您应该只需要保留汇总表,这将是一个压倒性的性能阻力。
换句话说,让数据库完成其工作的排序和总结。
答案 2 :(得分:0)
您可以使用count函数创建临时表并获取行计数:
CREATE TEMPORARY TABLE sum_table ENGINE=MyISAM ( SELECT SUM(2000 * COUNT(*)) `total` FROM `other_table`);
现在您可以查询sum_table
答案 3 :(得分:0)
不确定我理解你的问题。但这是你想要的吗?
Update table
set columnName = SUM(2000 * (select Count(*) from table2))