【发布时间】:2011-08-09 14:29:55
【问题描述】:
我有一个超过 1000 万行的表格,如下所示:
id | time_read | value
-----------------------
9 1111111111 100
9 1111111222 200
9 1111111333 150
9 1111111444 225
我想平均每 4 行的值。如何在 MySQL 中执行此操作?
另外,对于我的问题,如果我想对一个月内所有数据的每 4 行的值进行平均,并在表中返回每年每个月的总数,我该怎么做?例如,在我的第一个问题中使用同一张表,结果是:
2008 | 12 | 500000
2009 | 01 | 450000
2009 | 02 | 475000
edit:换句话说,每个平均 4 行的总和按年月分组。每个 time_read 相隔 15 分钟。
我以前做过类似的事情,但不够准确。我需要对每 4 行取平均值并将其总计,而不是取一个月内所有值的总和除以 4。
SELECT DATE_FORMAT(FROM_UNIXTIME(time_read),'%Y %m') as tr,
DATE_FORMAT(FROM_UNIXTIME(time_read),'%Y') as year,
DATE_FORMAT(FROM_UNIXTIME(time_read),'%m') as month, SUM(value) as value
FROM table WHERE id = 9
GROUP BY tr
【问题讨论】:
-
id是否每四行改变一次?
-
每四行?你想如何订购清单? id 是连续的吗?
-
id 不会每四行改变一次。一步一步地,我想获取单个 id 的所有记录。从这些记录中,我想平均每 4 行一个月。我的最终表格将包含数据库中每个月/年的这些平均值的总数。 time_read 字段是一个 unix 时间戳。
-
您确定要在数据库中执行此操作吗?似乎从数据库中提取所有值并以通用编程语言进行平均会更容易(而且不会更重)。
-
也可以。在那种情况下,我会做一些类似于 OP 中的查询的事情,只是没有 GROUP BY 和 SUM。不过,这将是一个巨大的结果集……在某些情况下,有一百万条记录。