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)。客户借出的书籍。问题与必须在查询中进行的计数有关。是否可以使用第一个查询中的计数值来减少第二个查询中的选定行而不重新计算所有行?

这是一个家庭作业,所以我不期待一个直接的答案。任何指针将不胜感激。

4

1 回答 1

1

看看dense_rank窗口函数。您想要所有密集等级为 3 或更少的行。

于 2012-09-08T06:05:09.197 回答