2011-08-17 4 views
3

주어진 id 당 값의 합을 계산할 때 문제가 있습니다. 하위 쿼리를 사용하여이 작업을 수행하기로 결정했습니다 (일반적으로 조인을 사용하지만 클리핑 목적을 위해 각 하위 쿼리의 카운터를 유지합니다 - 자세한 정보는 see this question). 이 질문을 위해, 나는 다음과 같은 MySQL의 쿼리가 있다고 가정 :부모 쿼리 열을 인식하도록 중첩 된 하위 쿼리를 얻는 방법

문제는 내가 experiement_id 일치하는 하위 쿼리의 행을 분리하기 위해 노력하고있어 행 7에 발생
/* 1. */ SELECT 
/* 2. */  t1.experiement_id, 
/* 3. */  (SELECT sum(x.size) 
/* 4. */  FROM (SELECT size, (@rownum := @rownum + 1) AS `rownum` 
/* 5. */    FROM data AS t0 
/* 6. */    JOIN (select @rownum := 0) 
/* 7. */    WHERE t0.experiment_id = t1.experiment_id 
/* 8. */    ORDER BY size) AS x 
/* 9. */    WHERE x.rownum <= t2.clip_index) AS `sum` 
/* 10. */ 
/* 11. */ FROM data  AS t1 
/* 12. */ JOIN data_clip AS t2 USING (experiment_id) 
/* 13. */ 
/* 14. */ GROUP BY t1.experiment_id 

- I t1.experiement_id은 알 수없는 열입니다. 이 수준은 한 단계 이상의 중첩 된 쿼리에서만 발생합니다. 수표처럼, 나는 t2.clip_index이 잘 처리되고있는 것으로 나타났습니다. 행 # 7을 주석 처리하면 쿼리가 올바르게 반환되지만 잘못된 결과가 반환됩니다. 하위 쿼리가 내 조건에서 사용할 부모 테이블의 열을 인식하도록 만드는 방법에 대한 아이디어가 있습니까? 감사.

+0

같은 문제가있어 해결책을 찾았습니까? – aleroot

+0

죄송합니다, 아직은. – sa125

답변

1

사용자 정의 변수 대신 행 수를 계산 해보신 적이 있습니까?

(SELECT sum(size) FROM data AS t0     
WHERE t0.experiment_id = t1.experiment_id 
ORDER BY size HAVING COUNT(*)<=t2.clip_index 
) AS `sum` 

이 기능이 작동하는지 알려면 여기에서 검토하는 것이 좋습니다.

관련 문제