【发布时间】:2013-09-10 14:52:27
【问题描述】:
如果我有以下表格:
create table rar (
rar_id int(11) not null auto_increment primary key,
rar_name varchar (20));
create table data_link(
id int(11) not null auto_increment primary key,
rar_id int(11) not null,
foreign key(rar_id) references rar(rar_id));
create table consumption (
id int(11) not null,
foreign key(id) references data_link(id),
consumption int(11) not null,
total_consumption int(11) not null,
date_time datetime not null);
我希望总消耗量是所有消耗量字段值的总和。有没有办法通过触发器来实现这一点?还是我每次都需要读取所有值+最新值,总结它们然后更新表格?有一个更好的方法吗?
--------------------------------------------------
id | consumption | total_consumption | date_time |
==================================================|
1 | 5 | 5 | 09/09/2013 |
2 | 5 | 10 | 10/09/2013 |
3 | 7 | 17 | 11/09/2013 |
4 | 3 | 20 | 11/09/2013 |
--------------------------------------------------
只是想知道每次添加新条目时是否有一种更简洁、更快捷的方法来获取总数?
或者这可能是糟糕的设计?最好有类似的东西:
SELECT SUM(consumption) FROM consumption WHERE date BETWEEN '2013-09-09' AND '2013-09-11' 为了获得此类信息……这样做是最好的选择吗?我看到的唯一问题是相同的命令将被重新运行多次 - 每次数据都不会被存储,因为它会被请求检索......当你重新生成时它可能效率低下为查看目的多次重复相同的报告...而不是如果已经计算了总数,您所要做的就是读取数据,而不是一次又一次地计算它...想法?
任何帮助将不胜感激......
【问题讨论】:
-
我不确定我是否会将总消费量保留为自己的列。存储 ID、消费和日期……然后在需要时使用 sum 语句提取 total_consumption。
-
也许这可以帮助你:stackoverflow.com/questions/17664436/…你可以不用存储“累积和”,并即时计算。
-
或者像
SELECT SUM(consumption) from consumption;一样使用view