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

如何编写SQL查询获取每个用户的最长昵称

解决每个用户最长昵称的SQL查询方案

这问题挺常见的,我给你两种实用的解决思路,都能得到你预期的结果:

方法一:使用窗口函数(推荐,适用于支持窗口函数的数据库如MySQL 8+、PostgreSQL、SQL Server等)

窗口函数的方式逻辑清晰,处理起来也很灵活,还能轻松应对多个昵称长度相同的场景:

SELECT "User Id", Nickname
FROM (
    SELECT 
        "User Id", 
        Nickname,
        -- 按用户分组,先按昵称长度降序排序,长度相同则按昵称字典序排序
        ROW_NUMBER() OVER (PARTITION BY "User Id" ORDER BY LENGTH(Nickname) DESC, Nickname) AS rn
    FROM your_table_name -- 记得把这里替换成你的实际表名
) ranked_nicknames
WHERE rn = 1;

说明:

  • PARTITION BY "User Id":把数据按用户ID分组,确保每个用户单独处理
  • ORDER BY LENGTH(Nickname) DESC:优先按昵称长度从长到短排序
  • 后面加Nickname是为了处理同一用户有多个相同最长长度昵称的情况,会返回字典序靠前的那个;如果想返回靠后的,改成Nickname DESC即可
  • 最后筛选rn = 1,就是每个组里排在第一位的最长昵称

方法二:使用关联子查询(兼容老版本数据库)

如果你的数据库不支持窗口函数,这种关联子查询的方式也能解决问题:

基础版(如果允许同一用户返回多个相同最长长度的昵称)

SELECT t1."User Id", t1.Nickname
FROM your_table_name t1
WHERE LENGTH(t1.Nickname) = (
    -- 子查询获取当前用户的昵称最大长度
    SELECT MAX(LENGTH(Nickname))
    FROM your_table_name t2
    WHERE t2."User Id" = t1."User Id"
);

进阶版(确保每个用户只返回一个结果)

如果想避免同一用户返回多条相同长度的昵称,可以结合聚合函数:

SELECT "User Id", MAX(Nickname) AS Nickname
FROM your_table_name t1
WHERE LENGTH(t1.Nickname) = (
    SELECT MAX(LENGTH(Nickname))
    FROM your_table_name t2
    WHERE t2."User Id" = t1."User Id"
)
GROUP BY "User Id";

这里用MAX(Nickname)会返回相同长度昵称里字典序最大的,换成MIN(Nickname)则返回最小的,按需调整即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:00:22