我玩了很多棋盘游戏,并且我维护着一个跟踪几个统计数据的站点/数据库。其中一个表记录了不同的时间。它的结构如下:
基本上,我想要做的是利用这些时间来获取一些有趣/有用的信息(比如平均花费最长的游戏设置,平均花费的游戏时间最长,游戏是什么从到达到结束的时间最长等等...)通常情况下,我过分依赖PHP而且我只会做一个select * ...然后抓住所有的时间然后做一些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分钟。知道为什么我的数字不正确吗?
答案 0 :(得分:6)
这是一个查询,以获取每个游戏的平均设置时间和游戏时间,希望它有所帮助:
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个带有一些随机数据的测试行,所以我的数字没有意义,但这就是你得到的结果。
请注意,这将扫描整个表格,因此可能需要一段时间,具体取决于您在此表格中的记录数量。如果你有相当数量的游戏记录,这肯定是你想要定期在后台运行的东西。
答案 1 :(得分:1)
对于像设置需要多长时间的事情,你可以编写如下内容:
SELECT DATEDIFF(HOUR, BeginSetup, StartTime) -- in hours how long to set up