Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询从表中提取两条信息_Mysql_Sql_Database - Fatal编程技术网

MySQL查询从表中提取两条信息

MySQL查询从表中提取两条信息,mysql,sql,database,Mysql,Sql,Database,我有一张记录玩我的游戏的人的分数的表 userID | game_level | date_of_attempt | score 1 1 2014-02-07 19:29:00 2 1 2 2014-02-08 19:00:00 0 2 1 2014-03-03 11:11:04

我有一张记录玩我的游戏的人的分数的表

userID |  game_level |      date_of_attempt        |  score
   1           1          2014-02-07 19:29:00           2
   1           2          2014-02-08 19:00:00           0
   2           1          2014-03-03 11:11:04           4
  ...         ...                 ...                  ...
我正在尝试编写一个查询,对于给定的用户,该查询将告诉我他们在每个游戏级别上的累积分数,以及他们在某个特定游戏级别上获得的最近20个分数的平均值(按尝试日期排序)

例如:

userID | game_level | sum of scores on game level |  average of last 20 level scores
   1         1                      26                              4.5
   1         2                     152                              13

有可能在一个查询中做这样的事情吗?我经常需要对多个游戏级别执行查询,我使用一个长的子查询来确定需要哪些级别,这让我觉得一个查询会更好

MySQL不支持分析功能,因此获得平均值比在其他一些RDBMS中要困难得多。在这里,我使用获得groupwise排名,然后对结果进行测试,仅对20条最新记录进行平均:

SELECT   userID, game_level, SUM(score), x.avg
FROM     my_table JOIN (
           SELECT   AVG(CASE WHEN (@rank := (CASE
                      WHEN t.userID     = @userID
                       AND t.game_level = @gamelevel
                      THEN @rank + 1
                      ELSE 0
                    END) < 20 THEN score END)   AS avg,
                    @userID     := userID     AS userID,
                    @game_level := game_level AS game_level
           FROM     my_table,
                    (SELECT @rank := @userID := @game_level := NULL) init
           ORDER BY userID, game_level, date_of_attempt DESC
         ) x USING (userID, game_level)
GROUP BY userID, game_level

有关更多信息,请参阅。

您是否可以发布您迄今为止尝试过的内容,即您提到的这个长子查询?