如何在Excel或SQL中实现按Letter排序同时相同姓名行聚合
解决方案
Excel 操作步骤
- 新增辅助列,列名可设为
排序基准值,使用公式获取当前姓名首次出现时对应的Letter:- 支持XLOOKUP的高版本Excel:
=XLOOKUP(A2,A:A,B:B,,0) - 低版本Excel:
=INDEX(B:B,MATCH(A2,A:A,0))
- 支持XLOOKUP的高版本Excel:
- 选中全部数据区域,设置自定义排序规则:
- 第一优先级:
排序基准值,升序 - 第二优先级:
Name,升序(确保首现Letter相同的姓名按原有先后顺序排列) - 第三优先级:
Letter,升序(确保同一姓名的行按Letter顺序排列)
执行排序后即可得到预期结果。
- 第一优先级:
SQL 实现代码
支持窗口函数的数据库(MySQL8.0+/PostgreSQL/SQL Server等)
核心逻辑是先通过窗口函数计算每个姓名的首现排序基准,再按规则排序:
WITH sort_base AS ( SELECT Name, Letter, -- 取每个姓名对应的最小Letter作为排序基准,如需严格匹配原表首次出现顺序可替换为 MIN(自增ID) OVER (PARTITION BY Name) MIN(Letter) OVER (PARTITION BY Name) AS first_letter FROM 你的表名 ) SELECT Name, Letter FROM sort_base ORDER BY first_letter ASC, Name ASC, Letter ASC;
不支持窗口函数的低版本数据库
用子查询关联获取排序基准:
SELECT t.Name, t.Letter FROM 你的表名 t JOIN ( SELECT Name, MIN(Letter) AS first_letter FROM 你的表名 GROUP BY Name ) t2 ON t.Name = t2.Name ORDER BY t2.first_letter ASC, t.Name ASC, t.Letter ASC;
内容的提问来源于stack exchange,提问作者SashaSQL
相关产品推荐
相关产品推荐

