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;

基本的に、このクエリは、no. お客様から借りた図書。この問題は、クエリで行う必要があるカウントの量に関連しています。すべての行を再カウントせずに、最初のクエリのカウント値を使用して、2 番目のクエリで選択した行を減らすことは可能ですか?

これは宿題なので、直接の回答は期待していません。任意のポインタをいただければ幸いです。

4

1 に答える 1

1

dense_rankウィンドウ関数を見てみましょう。密なランクが 3 以下のすべての行が必要です。

于 2012-09-08T06:05:09.197 に答える