0

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

场景:
目前我有一个表格,可以插入每个工人的生产行。
类似的东西:(Worker1)用(一些数量)为日期生产(product10)。
这适用于他白天工作的每个车站。

问题:
我需要生成一份工人在每个日期生产的总金额的报告。我知道如何生成报告,但问题是它如何更有效?

必须为每个人运行一个查询来总结每个日期的生产?或者有一个表格,我将插入总金额、workerID 和日期?

同样,如果您可以进一步解释它会很好,如果不是至少一个受过教育的答案会帮助我解决这个问题。

示例:
这是我现在在生产表中的内容:

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

这就是我最终想要的:

EmpID 金额 生产日期
----------------------------------
1 120 14/01/2013

我应该为此开始另一张桌子吗?还是我应该总结我在生产表中拥有的东西并拿走我需要的东西?
请记住,生产表每天都会变得越来越大(当然)。

4

2 回答 2

1

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

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

请参阅带有演示的 SQL Fiddle

结果:

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

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

于 2013-01-14T14:51:29.427 回答
1

i)直接:

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

ii)现在,桌子的大小将继续增长。而且您只需要每日报告。

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

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

因为它只是一张表,没有复杂的查询,MySql 将能够轻松处理数百万条记录。尝试 EXPLAIN 查询以检查被触及的记录数和正在使用的索引。

于 2013-01-14T14:54:58.320 回答