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

如何在GROUP BY分组SQL中关联各语言粉丝数最多的用户信息

按语言分组获取统计信息及粉丝数最多用户的SQL解决方案

数据表结构与数据

Lang, length, user, followers
-----------------------------
Esp,    10,   user0,   1
Esp,    20,   user1,   5
Eng,     5,   user2,  10
Eng,     2,   user3,  15
Jap,    25,   user4,   1

需求说明

按Lang字段分组,返回以下信息:

  • 语言标识(Lang)
  • 该语言下的记录行数(rows)
  • length字段的平均值(avg)
  • 该语言分组内粉丝数(followers)最高的用户(user)及其粉丝数

预期结果

Lang, rows, avg, user, followers
 Esp,   2,  15, user1,   5
 Eng,   2, 3.5, user3,  15
 Jap,   1,  25, user4,   1

已有SQL语句

SELECT 
    lang, COUNT(*) AS rows, 
    AVG(length) AS avg_length 
FROM
    toots 
GROUP BY
    lang 
LIMIT 10

解决方案

方法一:使用窗口函数(推荐,支持MySQL 8.0+、PostgreSQL等)

利用ROW_NUMBER()窗口函数为每个语言分组内的记录按粉丝数降序排名,筛选出每组的第一条记录后再进行统计:

WITH ranked_toots AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY Lang ORDER BY followers DESC) AS rank_num
    FROM toots
)
SELECT 
    Lang,
    COUNT(*) AS rows,
    AVG(length) AS avg,
    MAX(CASE WHEN rank_num = 1 THEN user END) AS user,
    MAX(followers) AS followers
FROM ranked_toots
GROUP BY Lang;

如果存在多个用户粉丝数并列最高的情况,可将ROW_NUMBER()替换为RANK(),会返回所有并列第一的用户(此时结果可能出现多行同语言的情况)。

方法二:分组统计关联原表(兼容老版本数据库)

先分组统计行数、平均值和每组最大粉丝数,再关联原表获取对应用户信息:

SELECT 
    t_group.Lang,
    t_group.rows,
    t_group.avg,
    t_user.user,
    t_user.followers
FROM (
    SELECT 
        Lang,
        COUNT(*) AS rows,
        AVG(length) AS avg,
        MAX(followers) AS max_followers
    FROM toots
    GROUP BY Lang
) t_group
JOIN toots t_user 
    ON t_group.Lang = t_user.Lang 
    AND t_group.max_followers = t_user.followers;

注意:若同一语言下有多个用户粉丝数等于最大值,该方法会返回多条该语言的记录,需根据实际需求调整(比如用DISTINCT或聚合函数处理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:12:37