Mysql查询平均时间


Mysql query to average time

我玩了很多棋盘游戏,我维护了一个跟踪一些统计数据的网站/数据库。其中一张表记录了不同的时间。它的结构看起来像这样:

  • gameName(text-棋盘游戏的名称)
  • numPeople(int-玩游戏的人数)
  • 时间到达(时间戳-我们到达玩游戏的房子的时间)
  • beginSetup(时间戳-我们开始设置游戏的时间)
  • startPlay(时间戳-我们实际开始玩游戏的时间)
  • gameEnd(时间戳-游戏结束的时间)

基本上,我想做的是利用这些时间从中获得一些有趣/有用的信息(比如什么游戏平均需要最长的时间来设置,什么游戏平均花费最长的钱来玩,什么游戏从到达到完成最长的,等等…)通常,我太依赖PHP了,我只会做一个选择*。。。然后做一些PHP计算来找到所有的统计数据,但我知道MySQL可以通过查询为我完成所有这些。不幸的是,当涉及到更复杂的查询时,我会非常困惑,所以我希望得到一些帮助。

我想要一些几个查询的例子,希望一旦有人让我开始,我能找出其他平均时间查询。平均玩棋盘游戏的时间最长时,查询会是什么样子?平均设置的最快游戏/时间如何?

其他信息:drew010-你给了我一个很好的开始,但我没有得到我期望的结果。我给你举了一些真实的例子。。。我有一个叫Harper的游戏,它已经玩了两次了(所以数据库中有两条记录的时间是整数)。以下是它的时代:

beginSetup(1) = 2012-07-25 12:06:03
startPlay(1) = 2012-07-25 12:47:14
gameEnd(1) = 2012-07-25 13:29:45
beginSetup(2) = 2012-08-01 12:06:30
startPlay(2) = 2012-08-01 12:55:00
gameEnd(2) = 2012-08-01 13:40:32

当我运行你提供给我的查询时(我将秒转换为小时/分钟/秒),我得到了以下结果(对不起,我不知道如何做你做的酷表):

gameName = Harper
Total Time = 03:34:32
...and other incorrect numbers.

根据这些数字,平均总时间应为约1小时24分钟,而不是3小时34分钟。知道我为什么会得到错误的数字吗?

这里有一个查询,可以获得每个游戏的平均设置时间和播放时间,希望它能有所帮助:

SELECT
  gameName,
  AVG(UNIX_TIMESTAMP(startPlay) - UNIX_TIMESTAMP(beginSetup)) AS setupTime,
  AVG(UNIX_TIMESTAMP(gameEnd) - UNIX_TIMESTAMP(startPlay)) AS gameTime,
  AVG(UNIX_TIMESTAMP(gameEnd) - UNIX_TIMESTAMP(beginSetup)) AS totalTime,
FROM `table`
GROUP BY gameName
ORDER BY totalTime DESC;

应产生类似于的结果

+----------+-----------+-----------+-----------+
| gameName | setupTime | gameTime  | totalTime |
+----------+-----------+-----------+-----------+
| chess    | 1100.0000 | 1250.0000 | 2350.0000 |
| checkers |  466.6667 |  100.5000 |  933.3333 |
+----------+-----------+-----------+-----------+

我刚刚插入了大约8个带有一些随机数据的测试行,所以我的数字没有意义,但这就是你会得到的结果。

请注意,这将扫描整个表,因此可能需要一段时间,具体取决于此表中的记录数量。如果你有大量的游戏记录,这肯定是你想要定期在后台运行的东西。

对于设置所需的时间,您可以编写以下内容:

SELECT DATEDIFF(HOUR, BeginSetup, StartTime) -- in hours how long to set up