2010-01-12 2 views
2

사용자를위한 트랜잭션 데이터를 저장하는 테이블이 있습니다. 사용자 등급을 찾으려면 해당 사용자의 최근 10 개 항목의 평균 점수를 사용하십시오. SQL로 그걸 얻을 수있는 방법이 있습니까?MySQL : 사용자 당 최근 10 개의 항목이 있습니까?

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 
+0

사용하고있는 MySQL의 버전은 무엇? –

+0

Ver 14.12 Distrib 5.0.45 – Jake

답변

2

사용 :

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 
+0

성공! 테이블 대신 서브 쿼리를 선택하십시오. 모든 선수에게 점수를 얻는 방법을 알아 내려고 노력할 것입니다. 필요하다면 별도의 질문을하는 것이 좋습니다. – Jake

+0

모든 사용자에게이 작업을 수행하는 유일한 방법은 MySQL에없는 순위를 사용하는 것입니다. 변수를 사용하여 psuedo 순위를 제공 할 수 있습니다. –

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가 어떤 식별 신분증이 어디 입니다.

+0

고맙습니다. 유망하지만 ... # 1235 -이 버전의 MySQL은 'LIMIT & IN/ALL/ANY/SOME 하위 쿼리'를 아직 지원하지 않습니다. 가능한 경우 업그레이드해야 할 수 있습니다. 더 좋은 방법을 찾지 못한다. – Jake