我玩很多棋盘游戏,并且维护一个网站/数据库来跟踪一些统计数据。其中一张表记录了不同的时间。它的结构如下所示:
-
gameName(文字 - 棋盘游戏的名称)
-
人数(int - 玩过的人数)
-
时间到达(时间戳 - 我们到达我们正在玩游戏的房子的时间)
-
开始安装(时间戳 - 我们开始设置游戏的时间)
-
开始播放(时间戳 - 我们实际开始玩游戏的时间)
-
gameEnd(时间戳 - 游戏结束的时间)
基本上,我想做的就是利用这些时间来获取一些有趣/有用的信息(例如,什么游戏平均需要最长的设置时间、什么游戏平均需要最长的玩时间、什么游戏的启动时间最长)通常,我过于依赖 PHP,我只会执行 select * ... 并获取所有时间,然后进行一些 PHP 计算以查找所有统计数据,但我知道 MySQL 可以通过查询为我完成这一切。不幸的是,当涉及到更复杂的查询时,我会非常迷失,所以我需要一些帮助。
我想要一些查询的例子,希望一旦有人让我开始,我就能找出其他平均时间查询。玩棋盘游戏平均最长时间的查询会是什么样子?平均最快的游戏/时间设置怎么样?
附加信息:Drawing010 - 你让我有了一个良好的开端,但我没有得到我预期的结果。我给你举了一些真实的例子...
我有一个名为 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.
从数字来看,平均总时间should大约 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 个测试行和一些随机数据,因此我的数字没有意义,但这就是您会得到的结果。
请注意,这将扫描您的整个表,因此可能需要一段时间,具体取决于该表中有多少记录。如果你有大量的游戏记录,这绝对是你想要定期在后台运行的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)