2012-09-08 3 views
1

다음 쿼리를 최적화하려고합니다. 개수 비교를위한 쿼리 최적화

EXPLAIN 
select clb.f_name, clb.l_name, noofbooks 
from (
    select f_name, l_name, count(*) as noofbooks from 
    customer natural join loaned_book 
    group by f_name, l_name 
) as clb 
where 3 > (
    select count(*) from (
     select f_name, l_name, count(*) as noofbooks 
     from customer natural join loaned_book 
     group by f_name, l_name 
    ) as clb1 
    where clb.noofbooks<clb1.noofbooks 
) 
order by noofbooks desc; 

는 기본적으로이 쿼리는 어떤의 (즉, 3 국한되지 관계 포함) "세 가지"수를 찾기 위해 노력하고있다. 고객이 대여 한 책. 이 문제는 쿼리에서 만들어야하는 개수와 관련이 있습니다. 첫 번째 쿼리의 카운트 값을 사용하여 모든 행을 다시 계산하지 않고 두 번째 쿼리에서 선택한 행을 줄일 수 있습니까?

이것은 숙제이기 때문에 직접적인 대답은 기대하지 않습니다. 모든 포인터는 감사하겠습니다.

+0

카운트 수가 "4 4 3 3 2 2 2 1"이면 어떻게 될까요? "동점을 포함한 상위 3 개"가 "4 4 3 3"또는 "4 4 3 3 2 2 2"가되어야합니까? 또는 다른 것? –

+0

안녕 마크 - "4 4 3 3 2 2 2"는 그 예에서 정확합니다. – jmc

답변

1

dense_rank 창 기능을보십시오. 밀도가 3 이하인 모든 행을 원합니다.

+0

고마워 마크가이 문제를 해결할 수있었습니다. 감사! – jmc