2

ユーザーのトランザクションデータを格納するテーブルがあります。ユーザーの評価を見つけるには、そのユーザーの最後の10エントリの平均スコアを取得します。SQLでそれを取得する方法はありますか?

IDを指定して、1人のユーザーで問題を解決できるようにする必要があります。そして、スコア順に並べられたすべてのユーザーのリストを取得します。

現在、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
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

すでに使用されている2つのクエリを組み合わせるだけです。

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 に答える