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

T-SQL分组查询:按职位选取最长名称的实现问题

解决SQL Server 2012按职位分组取最长名字的问题

嘿,我来帮你搞定这个分组取最长myname的需求!在SQL Server 2012里,我们有几种简单可靠的方法来实现,下面给你详细说明:

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

SQL Server 2012开始支持窗口函数,用ROW_NUMBER()或者DENSE_RANK()可以轻松实现分组筛选,逻辑更清晰:

场景1:每个职位只返回一条最长名字(长度相同时取字典序靠前的)

WITH RankedNames AS (
    SELECT 
        position,
        myname,
        -- 按职位分组,按名字长度倒序,长度相同则按名字字典序排序
        ROW_NUMBER() OVER (PARTITION BY position ORDER BY LEN(myname) DESC, myname) AS rn
    FROM YourTableName -- 替换成你的实际表名
)
SELECT position, myname AS LongestName
FROM RankedNames
WHERE rn = 1;

场景2:返回所有长度最长的名字(如果同一职位有多个长度相同的最长名字)

如果需要保留所有长度达标的记录,把ROW_NUMBER()换成DENSE_RANK()即可:

WITH RankedNames AS (
    SELECT 
        position,
        myname,
        DENSE_RANK() OVER (PARTITION BY position ORDER BY LEN(myname) DESC) AS rn
    FROM YourTableName
)
SELECT position, myname AS LongestName
FROM RankedNames
WHERE rn = 1;

方法二:聚合子查询关联

如果你更习惯传统的子查询写法,也可以先统计每个职位的名字最大长度,再关联原表匹配对应记录:

SELECT t.position, t.myname AS LongestName
FROM YourTableName t
INNER JOIN (
    -- 先算出每个职位对应的名字最大长度
    SELECT position, MAX(LEN(myname)) AS MaxNameLength
    FROM YourTableName
    GROUP BY position
) m ON t.position = m.position AND LEN(t.myname) = m.MaxNameLength;

注意:这种方法如果同一职位有多个长度相同的最长名字,会返回所有符合条件的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:19:42