2016-08-08 3 views
0

테이블의 각 행에 대해 AVG가 필요합니다. 우리가MYSQL 각 행에 대해 AVG 가져 오기

id val 
1 5 
2 6 
3 7 

가 있다고 가정하자 나는

id val 
1 0.277 (5/18) 
2 0.333 (6/18) 
3 0.388 (7/18) 

을 얻을 필요가 나는 쉽게 같은 테이블에 가입하지 않고 MYSQL이받을 수 있습니까?

+1

당신이 얻으려고하는 것은 * 평균 *가 아닙니다. 28 명은 어디에서 왔는가? –

+0

미안 - 오타. 그것은 18이어야합니다. 나는 –

답변

1

val 열을 요약하고 val 열을 그 합계로 나눌 수 있습니다.

select id, 1.0*val/(select sum(val) from tablename) val 
from tablename 
+0

질문을 편집했습니다. 이것이 유일한 방법입니까? 나는 "같은 테이블에 가입하지 않고"해야한다고 언급했다. 왜냐하면 데이터가 복잡하고 초기 쿼리가 두 번 실행되기 싫기 때문입니다. ( –

+0

@VladimirGordienko 조인하지 않아도 순진한 접근 방식은 두 가지 별도의 스캔을 수행하는 것입니다. 하나는 합계, 저장 및 사용을 계산하는 것입니다. 쿼리 엔진을 기본 쿼리에 대한 const로 사용합니다. 하위 쿼리는 주 쿼리의 각 행마다 매번 실행되지 않습니다 . – nimdil

+0

정말 하위 쿼리를 사용하여 테스트했으며 MYSQL이 동일한 쿼리를 두 번 실행하지 않는 것처럼 보입니다. 이 솔루션은 나에게 좋다. –

관련 문제