我有以下要优化的查询。
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)。客户借出的书籍。问题与必须在查询中进行的计数有关。是否可以使用第一个查询中的计数值来减少第二个查询中的选定行而不重新计算所有行?
这是一个家庭作业,所以我不期待一个直接的答案。任何指针将不胜感激。