【问题标题】:Summary of a day or run a query and sum the results?一天的总结或运行查询并总结结果?
【发布时间】:2012-12-28 11:31:31
【问题描述】:

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

场景:
目前我有一个表格,可以插入每个工人的生产行。
类似于:(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

我应该为此另开一张桌子吗?还是我应该只总结生产表中的内容并取我需要的内容?
请记住,生产表每天都会变得越来越大(当然)。

【问题讨论】:

  • 您能否展示您的表格架构/示例数据以及基于此的预期结果? :) 然后有人可以在这里帮助您,因为它清楚地显示了您当前的结构。

标签: mysql database


【解决方案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 查询以检查被触及的记录数和正在使用的索引。

【讨论】:

  • 所以基本上它对sql server 没关系?我计划每季度或其他时间存档,而不是每天存档,因为我也需要做月度报告。如果您说服务器可以使用它,那我很好,问题是如何提高效率?
  • 您每个月投影多少条记录?一亿? More?我建议你创建这样的虚拟记录并衡量性能。您可以阅读thismore insights 的回答。另外,您是否实时准备和显示报告?
  • 不,不是很多……也许每月 1k 所以不是很多,好吧,所以我不需要我收集的那张桌子。谢谢。
【解决方案2】:

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

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

【讨论】:

  • 是的,我的意思是 2013 年,我知道如何编写 sql 查询来提取信息。问题是,如果有一个表格可以做到这一点并为我保存信息以选择我想要的日期,是否会更有效?
  • @SagiRokach 你在说多少数据?数百万条记录?
  • 一个月大约有 1k 条记录,我认为我不需要另一个表。我会每年左右归档这张桌子,这样就可以了。谢谢。
  • @SagiRokach 只要您在正确的字段上有索引,那么运行此查询应该不会导致任何问题。每月 1k 对运行查询来说非常小。
猜你喜欢
  • 2021-12-08
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多