2010-08-13 3 views
2

모든 플레이어의 모든 점수를 저장하는 테이블이 있습니다. 나는 마지막 3 개 (또는 그 이하)를 꺼내 평균을 표시하고 싶다.모든 사람의 마지막 X 레코드 평균을 찾습니다.

예 :

TABLE log 
time p_id score 
---- ---- ----- 
12:00 0  10 
14:23 0  25 
14:25 1  30 
16:27 0  70 
17:00 0  80 

지금은 모든 선수들의 지난 3 개 항목의 평균을 찾으려면 ...

결과 :

p_id avg 
---- --- 
0  58 
1  30 

어떻게 진행해야합니까?

+0

나는 많은 것을 시도했지만 아무데도 가지 않았다. 이 작업을 수행하는 동안 MySQL에서 경고하는 몇 가지 경고가 나타났습니다. 'SELECT COUNT (*) FROM log LIMIT 3;'이라는 대답을 5로 생성합니다. 그것은 집계가 LIMIT 절을 무시하는 것처럼 보입니다. 'AVG (score) FROM log where p_id = 0 ORDER BY time DESC LIMIT 3;'을 선택하면 예상했던대로 평균 46.25가 나오지 않고 58.333이됩니다. –

+0

Brian Hooper의 commetns에 추가하면 아마도 마지막 3 행을 반환하는 하위 쿼리에 참여해야하며 그 결과에 집계 함수를 사용해야합니다. –

답변

4
SELECT p_id, avg(score) as avg_score 
FROM (
    SELECT p_id, score FROM log ORDER BY time LIMIT 3 
) 
GROUP BY p_id 

트릭을 수행해야합니다.

관련 문제