我有一个表存储的交易数据向用户展示。为了找到一个用户等级,你拿过去的10个条目该用户的平均分数。是否有一种方式来获得与SQL?

我需要能够解决它对于给定的ID的单个用户。并获得通过他们的得分下令所有用户的列表。

目前我正在出来的MySQL外面并将其存储在另一栏为每个用户,所以我可以ORDER_BY这一点。

# 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 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

其他提示

就已经将二者结合起来的查询使用:

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是任何识别I.D.是

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top