一天的摘要或运行查询并总结结果?

时间:2013-01-14 13:45:24

标签: mysql database

由于我不知道计算效率,我会问这里,我希望有人可以告诉我什么是更好的并解释一下。

情景:
目前我有一个表格,可以插入每个工人的生产行 类似于:(Worker1)生成(product10)一些日期(一定数量) 这就是他当天工作的每个电台。

问题:
我需要生成工人为每个日期生成的金额总和的报告。我知道如何以任何方式生成报告,但问题是如何更有效率?

必须为每个人运行查询,总结每个日期的生产?或者有一张表,我会插入总金额,工人ID和日期?

再次,如果你可以进一步解释它会很好,如果不是至少一个有根据的答案将帮助我很多这个问题。

示例:
这就是我现在在生产表中所拥有的:

ID     EmpID     ProductID     Amount     Dateofproduction
----------------------------------------------------------
1      1         1             100        14/01/2013  
2      1         2             20         14/01/2012

这就是我最终想要的:

EmpID    Amount    DateofProduction
-----------------------------------
1        120       14/01/2013

我应该为此启动另一张桌子吗?或者我应该在生产表中总结一下我的需求并采取我需要的东西? 请记住,生产表每天都会越来越大(当然)。

2 个答案:

答案 0 :(得分:1)

除非我遗漏了什么,否则听起来你只是想要这个:

select empid,
  sum(amount) TotalAmount,
  Dateofproduction
from yourtable
group by empid, Dateofproduction

请参阅SQL Fiddle with Demo

结果:

| EMPID | TOTALAMOUNT | DATEOFPRODUCTION |
------------------------------------------
|     1 |         120 |       2013-01-14 |

注意:我猜你提供的第二行数据应该是2013而不是2012

答案 1 :(得分:1)

i)直接:

select EmpId, sum(Amount) as Amount, DateOfProduction 
from ProductionTable
group by EmpId, DateOfProduction.

ii)现在,表格的大小将继续增长。而且你只需要按日报告。

这张桌子是否被其他人使用?部分数据可以归档吗?如果可以存档某些数据,我建议在每天和报告之后,将此表中的所有数据备份到辅助存档表。因此,每天您只需查询today's个值的记录。

其次,您可以考虑将index添加到DateOfProduction。然后,您就可以在日期范围内限制查询。例如,select EmpId, sum(Amount) as Amount, DateOfProduction from ProductionTable group by EmpId, DateOfProduction where DateOfProduction = Date(now()).(或类似的东西)

因为它只是一个表而且没有复杂的查询,所以MySql可以轻松地处理数百万条记录。尝试对查询进行EXPLAIN以检查被触摸的记录数和正在使用的索引。