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

校园建议应用:如何查询提交建议最多用户的所有相关条目?

查询提交建议数量最多的用户的所有相关条目

以下提供两种通用的SQL解决方案,适配不同的数据库环境:

方法一:子查询分步实现(兼容绝大多数SQL数据库)

这种写法无需依赖窗口函数,适用于所有支持基础SQL语法的数据库(如MySQL 5.x、SQLite等)。

实现逻辑

  1. 统计每个用户的建议提交数量,找出其中的最大值;
  2. 筛选出提交数量等于该最大值的所有用户ID;
  3. 关联用户表与建议表,获取这些用户的所有相关数据(用户信息+对应建议条目)。

完整SQL代码

SELECT u.*, s.*
FROM users u
INNER JOIN suggestions s ON u.userId = s.userId
WHERE u.userId IN (
    -- 筛选出提交建议数量最多的用户ID
    SELECT userId
    FROM suggestions
    GROUP BY userId
    HAVING COUNT(sugId) = (
        -- 找出所有用户中最多的建议提交数
        SELECT MAX(suggestion_count)
        FROM (
            SELECT COUNT(sugId) AS suggestion_count
            FROM suggestions
            GROUP BY userId
        ) AS user_counts
    )
)

方法二:窗口函数实现(适用于支持窗口函数的数据库)

如果你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server等),可以用更简洁的写法,同时天然支持处理多个用户并列第一的场景。

实现逻辑

  1. 统计每个用户的建议提交数量;
  2. 对用户按提交数量降序排名;
  3. 筛选出排名为1的用户,关联获取他们的所有相关数据。

完整SQL代码

WITH user_suggestion_stats AS (
    -- 统计每个用户的建议数量并排名
    SELECT 
        userId,
        COUNT(sugId) AS suggestion_count,
        RANK() OVER (ORDER BY COUNT(sugId) DESC) AS user_rank
    FROM suggestions
    GROUP BY userId
)
SELECT u.*, s.*
FROM users u
INNER JOIN suggestions s ON u.userId = s.userId
INNER JOIN user_suggestion_stats uss ON u.userId = uss.userId
WHERE uss.user_rank = 1

补充说明

  • 如果只需要获取建议条目,不需要用户表信息,可以移除users u的关联部分,直接查询suggestions表中对应userId的记录;
  • 若希望仅返回一个用户(即使存在并列第一),可将RANK()替换为ROW_NUMBER(),但通常保留所有并列用户更符合业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:55:17