2009-05-31 2 views
0
SELECT *, 
     Group_concat(rating) AS rating_total, 
     Sum(rating_total) AS rating_sum, 
     Avg(rating_sum)  AS rating_avg 
FROM ratings 
GROUP BY pid 

어떤 이유로 든 합계와 평균은 실행되지 않습니다 ....이 문장을 어떻게 작동 시키나요?SQL GROUP_CONCAT + SUM + AVG

답변

5

SQL이 쿼리를 컴파일하는 방식 때문에 (GROUP_CONCAT을 사용하고 있기 때문에 MySQL을 사용한다고 가정 함) order by 절 앞에 별칭이 지정된 열 이름을 참조 할 수 없습니다. SUM 및 AVG 함수 은 절차 번호이 아닙니다. 그것들은 병행하여 행해진 다. 이는 그들이 부양 할 수 없다는 것을 의미합니다.

두 번째로 GROUP_CONCAT은 숫자가 아닌 문자열을 반환합니다. 당신이 SUM/AVG에 어떻게 희망 하는가? 단지 SUM 및 AVG 자체의 등급 열을 AVG하십시오.

가 지금이 주어진, 당신이 할 수 있습니다 :

SELECT 
    pid, 
    GROUP_CONCAT(rating) AS rating_total, 
    SUM(rating) as rating_sum, 
    AVG(rating) as rating_avg 
FROM 
    rating 
GROUP BY 
    pid 

이것은 당신이 찾고있는 무엇을 얻어야한다.

+0

downvoted 사람들은 이유를 설명하기 위해 의견을 남길 수 있습니까? – Eric

+0

내 downvote가 아니었지만 GROUP BY 쿼리의 * 일 수 있습니다. – Andomar

+0

잘자요. 나는 그것에 대해 생각하지 않고 OP의 행을 맹목적으로 복사했습니다. 머리가 바뀌어서 고마워. – Eric

0

GROUP_CONCAT는 선택한 모든 값을 연결하는 문자열을 반환합니다. 그런 다음, 그 문자열을 합산하려고 시도하고 나서 합계의 평균을 얻으려고합니다.

연결 결과가 아닌 테이블의 값에 SUM 및 AVG를 사용해야한다고 생각합니다.