You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何查询拥有最多好友的所有用户(含并列情况)

PostgreSQL 查询所有拥有最多好友的用户(支持并列场景)

表结构

CREATE TABLE Friendship (
    User1 INT,
    User2 INT,
    PRIMARY KEY (User1, User2),
    CONSTRAINT columns_cannot_equal CHECK (User1 <> User2)
);

示例数据

user_id,friend_id
134443,5888
232309,8909
232309,185595
232309,172634
232309,118037
80195,46650
80195,80429
80195,216751
80195,224625
175987,175483
175987,243131
175987,141773
175987,226862
247382,68616
247382,183025
101421,91108
101421,159948
101421,12395
101421,55391
201263,104651
201263,175709
201263,243725
201263,141645
241625,266922
241625,184460
241625,103497
241625,16108
4860,175056
4860,103123
4860,184967

原有查询(仅返回单个用户)

之前的查询语句只能返回好友数最多的单个用户:

SELECT user_id, COUNT(*) AS friend_count
FROM (
    SELECT User1 AS user_id
    FROM Friendship
    UNION ALL
    SELECT User2 AS user_id
    FROM Friendship
) AS all_users
GROUP BY user_id
ORDER BY friend_count DESC
LIMIT 1;

需求说明

需要返回所有拥有最高好友数的用户,当多个用户好友数同为最大值时,全部列出。

解决方案

方法1:使用窗口函数(推荐)

利用RANK()窗口函数直接筛选排名第一的所有用户:

WITH user_friend_counts AS (
    SELECT user_id, COUNT(*) AS friend_count
    FROM (
        SELECT User1 AS user_id FROM Friendship
        UNION ALL
        SELECT User2 AS user_id FROM Friendship
    ) AS all_users
    GROUP BY user_id
)
SELECT user_id, friend_count
FROM (
    SELECT 
        user_id, 
        friend_count,
        RANK() OVER (ORDER BY friend_count DESC) AS rnk
    FROM user_friend_counts
) AS ranked_users
WHERE rnk = 1;

方法2:先查询最大好友数再关联

先计算最高好友数,再筛选出所有好友数等于该值的用户:

WITH user_friend_counts AS (
    SELECT user_id, COUNT(*) AS friend_count
    FROM (
        SELECT User1 AS user_id FROM Friendship
        UNION ALL
        SELECT User2 AS user_id FROM Friendship
    ) AS all_users
    GROUP BY user_id
),
max_friend_count AS (
    SELECT MAX(friend_count) AS max_count FROM user_friend_counts
)
SELECT user_id, friend_count
FROM user_friend_counts, max_friend_count
WHERE friend_count = max_count;

对您尝试代码的说明

您之前的代码仅获取了最大好友数,但未关联回对应的用户ID。上述两种方法既获取了最大值,又匹配到所有符合条件的用户。

内容的提问来源于stack exchange,提问作者3nondatur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:32:38