質問

私は、ユーザーのトランザクションデータを格納するテーブルを持っています。あなたは、そのユーザのための最後の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

他のヒント

ただ、すでに使用中の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が何らかの識別内径でありますである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top