Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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:每个用户最后10个条目?_Sql_Mysql_Aggregate_Average - Fatal编程技术网

MySQL:每个用户最后10个条目?

MySQL:每个用户最后10个条目?,sql,mysql,aggregate,average,Sql,Mysql,Aggregate,Average,我有一个为用户存储事务数据的表。要查找用户评分,请获取该用户最近10个条目的平均分。有没有一种方法可以通过SQL实现这一点 我需要能够为给定ID的单个用户计算出它,并获得按分数排序的所有用户的列表 目前,我正在MySQL之外解决这个问题,并将它存储在每个用户的另一个col中,这样我就可以据此订购 # returns average for all transactions. SELECT user_id, AVG(score) FROM transactions WHERE user_id =

我有一个为用户存储事务数据的表。要查找用户评分,请获取该用户最近10个条目的平均分。有没有一种方法可以通过SQL实现这一点

我需要能够为给定ID的单个用户计算出它,并获得按分数排序的所有用户的列表

目前,我正在MySQL之外解决这个问题,并将它存储在每个用户的另一个col中,这样我就可以据此订购

# returns average for all transactions.
SELECT user_id, AVG(score) FROM transactions WHERE user_id = 1
# returns scores for last 10 transactions.
SELECT user_id, score FROM transactions WHERE user_id = 1 ORDER_BY date DESC LIMIT 10

只需将已经使用的两个查询组合起来:

SELECT user_id, AVG(score)
FROM transactions
WHERE rowid in (
    SELECT rowid
    FROM transactions
    WHERE user_id = 1
    ORDER_BY date DESC
    LIMIT 10)
其中rowid是标识ID的任何内容。

使用:

  SELECT x.user_id,
         AVG(x.score)
    FROM (SELECT t.user_id,
                 t.score
            FROM TRANSACTIONS t
           WHERE t.user_id = ?
        ORDER BY t.date
           LIMIT 10) x
GROUP BY x.user_id

谢谢,看起来很有希望,但是。。。1235-此版本的MySQL还不支持“LIMIT&IN/ALL/ANY/SOME子查询”,如果找不到更好的方法,我可能需要升级。您使用的MySQL版本是什么?版本14.12发行版5.0.45成功!因此,您可以从子查询而不是表中进行选择。我将尝试找出如何获得所有玩家的分数,我想如果需要的话,可以单独问一个问题。对所有用户执行此操作的唯一方法是使用排名,这是MySQL没有的。您可以使用变量提供psuedo排名。