计数比较的查询优化

时间:2012-09-08 05:34:48

标签: sql postgresql optimization select

我正在尝试优化以下查询。

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;

基本上这个查询试图找到&#34;前三个&#34;计数(包括关系,即不限于3)。由客户借出的书籍。 该问题与必须在查询中进行的计数量有关。 是否可以使用第一个查询中的计数值来减少第二个查询中的选定行而不重新计算所有行?

这是一项家庭作业,所以我不期待直接回答。任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

查看dense_rank窗口功能。您希望密集等级为3或更小的所有行。