1

以下查询返回拥有最多朋友的用户。该视图allUserFriendCounts列出了他们有多少朋友旁边的所有用户名(为了我的问题,我需要使用这个视图)。在下面运行这个查询似乎需要两倍的时间 running allUserFriendCounts,因为它必须运行后者两次。

有没有办法更有效地重写它?

create or replace view getMaxFriendCount(name) as
    select f.name
    from allUserFriendCounts f
    where f.friendcount = (select max(committeecount) from allUserFriendCounts)
    GROUP BY name
;

我正在使用 PostgreSQL 9.2.1

4

1 回答 1

1

如果我理解您,您的初始查询是:

select f.name
from allUserFriendCounts f
where f.friendcount = (select max(c.friendcount) from allUserFriendCounts as c)
group by name

因此您可以使用dense_rank()orrank()进行查询:

with cte as (
    select
        *,
        rank() over(order by f.friendcount desc) as rnk
    from allUserFriendCounts as f
)
select name
from cte
where rnk = 1

sql fiddle demo

于 2013-09-27T08:01:38.420 回答