Pergunta

Eu tenho uma tabela armazenando dados transacionais para usuários. Para encontrar uma classificação de usuários, você obtém a pontuação média das últimas 10 entradas para esse usuário. Existe uma maneira de conseguir isso com o SQL?

Eu preciso poder resolver isso para um único usuário, devido ao seu ID. E obter uma lista de todos os usuários encomendados por sua pontuação.

Atualmente, estou trabalhando fora do MySQL e armazenando -o em outro Col para cada usuário, para que eu possa encomendar isso.

# 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
Foi útil?

Solução

Usar:

  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

Outras dicas

Basta combinar as duas consultas já em uso:

SELECT user_id, AVG(score)
FROM transactions
WHERE rowid in (
    SELECT rowid
    FROM transactions
    WHERE user_id = 1
    ORDER_BY date DESC
    LIMIT 10)

Onde rowid é o que é o ID de identificação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top