2012-04-02 3 views
0

나는 스레드가 있고 다른 사용자가 3 가지 유형의 영화를 평가합니다. 나는 평균을 얻고 싶은 내 쿼리의 결과로다른 유형의 평점에 대한 SQL 계산 평균

| ID | thread_id | user_id | type    | value 
| 12 | 22  | 2  | 'movie.imdb'  | 8.5 
| 23 | 22  | 4  | 'movie.imdb'  | 7.5 
| 42 | 22  | 5  | 'movie.story' | 8.5 
| 56 | 22  | 6  | 'movie.quality' | 8.5 
| 76 | 22  | 6  | 'movie.imdb'  | 7.53 

:

movie.quality, movie.story and movie.imdb 때문에 등급 테이블의 구조는 다음과 같습니다 = 내가 스레드 (22), 및 다른 유형을 말해봐 프로 ID 및 유형과 비슷 함

array(thread_id=22 => array(
         type=>movie.imdb => average=>8.2), 
         type=>movie.story => average=>8.8), 
         type=>movie.quality => average=>8.1)) 

어떻게이 쿼리를 구성 할 수 있습니까?

select `type`, avg(`value`) 
from ratings 
where `thread_id` = 22 
group by `type` 

답변

1

당신이 thread_id, 유형별로 그룹을 할 수 있으며,이 thread_id에서에 따라 선택할 수 있습니다이 쿼리의 출력에서 ​​

select thread_id,type, avg (value) 
from rating 
group by thread_id,type 

지금 값의 평균을 수행 할 수 있습니다 그룹화하여

+0

SELECT 스레드, 유형, 평균 (VALUE), 개수 (*) 평가에서 어디 스레드 = 25 GROUP BY 스레드, TYPE, charme, 감사처럼 작동합니다. – Confidence

2

배열을 만들거나 배열하는 코드 또는 더 정확하게는 배열 또는 배열 ..

+0

대답에 따라 SELECT TYPE, AVG ('value') FROM rating where thread = 25 GROUP BY '유형'; does not work :(= 평균을 0으로 보여주고 모든 타입이 아닌 하나의 타입만을 보여줍니다.) – Confidence

+1

'type'이 아닌'\'type \''입니다. 즉 작은 따옴표가 아닌 backticks를 사용합니다. * 큰 ** 차이 –