2

我有一个存储用户事务数据的表。要查找用户评分,您可以取该用户最后 10 个条目的平均分数。有没有办法用 SQL 来实现它?

我需要能够为给定 ID 的单个用户解决这个问题。并获取按分数排序的所有用户的列表。

目前我正在 MySQL 之外解决它并将它存储在每个用户的另一个 col 中,这样我就可以 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
4

2 回答 2

3

利用:

  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
于 2010-01-12T03:17:10.580 回答
1

只需结合已在使用的两个查询:

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在哪里。

于 2010-01-12T02:05:39.250 回答