2014-06-20 4 views
0

외부 쿼리의 모든 행에서 concat 목록을 얻으려고하지만 Unknown column 'outter_client' in 'where clause' 다른 곳에서 하위 쿼리의 외부 변수에 액세스 할 수 없다는 것을 보았습니다. 저장 프로 시저, 뷰 또는 임시 테이블을 사용하지 않고 쿼리하면 작동합니까?하위 쿼리에서 MySQL GROUP_CONCAT

SELECT client AS outer_client, top_domain 
FROM log 
JOIN (
    SELECT GROUP_CONCAT(t.domain) AS top_domain 
    FROM (
     SELECT domain 
     FROM log 
     WHERE client = outer_client 
     GROUP BY 1 
     ORDER BY SUM(bytes) 
     LIMIT 5 
    ) t 
) k 
GROUP BY client 
ORDER BY SUM(bytes) 
LIMIT 5; 
+1

당신이 내부 쿼리의 조인 조건에서 외부 쿼리의 열 별칭을 참조 할 수 없습니다 : 당신은 중첩 된 선택과 substring_index()/group_concat() 트릭을 사용하여이 작업을 수행 할 수 있습니다. 테이블 별칭 사용;) – Frazz

답변

1

각 클라이언트의 상위 5 개 도메인을 바이트 수를 기반으로 원한다고 생각합니다.

select client, 
     substring_index(group_concat(domain order by sumbytes desc), ',', 5) as top5domains 
from (select client, domain, sum(bytes) as sumbytes 
     from log 
     group by client, domain 
    ) cd 
group by client 
order by sum(sumbytes) desc 
limit 5; 
+0

오른쪽! 알았어. – einundswanzig