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

如何按国家分组取最高能力值球员,及处理姓名特殊字符?

问题与解决方案

原问题场景

原执行的SQL语句:

SELECT short_name, overall, club_name, nationality_name FROM FIFA.dbo.players_22

返回结果:

K. Mbappé  91  Paris Saint-Germain France
M. Neuer    90  FC Bayern München  Germany
M. ter Stegen   90  FC Barcelona    Germany
H. Kane 90  Tottenham Hotspur   England
N. Kanté   90  Chelsea France
K. Benzema  89  Real Madrid CF  France

需求:仅返回每个国家overall(能力值)最高的球员,期望输出:

K. Mbappé  91  Paris Saint-Germain France
M. Neuer    90  FC Bayern München  Germany
H. Kane     90  Tottenham Hotspur   England

同时咨询:如何简便处理short_name列中的特殊字符(当前输出无法识别带重音的字母,比如é、ü这类乱码的重音字符)


一、实现各国最高能力值球员查询

直接按国家分组取MAX(overall)无法关联到对应球员的其他信息,推荐用窗口函数来实现:

方案:ROW_NUMBER()窗口函数

WITH ranked_players AS (
    SELECT 
        short_name, 
        overall, 
        club_name, 
        nationality_name,
        -- 按国家分组,能力值降序排名
        ROW_NUMBER() OVER (PARTITION BY nationality_name ORDER BY overall DESC) AS rank_num
    FROM FIFA.dbo.players_22
)
SELECT short_name, overall, club_name, nationality_name
FROM ranked_players
WHERE rank_num = 1;

说明:

  • 这个方法会给每个国家的球员按能力值从高到低排名,取排名第1的球员
  • 如果同一国家有多个球员能力值并列最高,只返回其中一个;若要保留所有并列球员,把ROW_NUMBER()换成RANK()或DENSE_RANK()即可

二、处理short_name中的特殊重音字符

针对SQL Server环境,有以下几种简便方法:

1. 用排序规则快速去除重音

通过指定不区分重音的排序规则,自动将重音字符转换为无重音对应字符:

SELECT 
    short_name,
    -- SQL_Latin1_General_CP1_CI_AI 中AI表示不区分重音
    short_name COLLATE SQL_Latin1_General_CP1_CI_AI AS cleaned_name
FROM FIFA.dbo.players_22;

效果:é会转为e,ü转为u,直接消除重音乱码问题。

2. 手动替换特定重音字符

如果只需要处理少数几种重音字符,直接用REPLACE批量替换:

SELECT 
    short_name,
    REPLACE(REPLACE(short_name, 'é', 'é'), 'ü', 'ü') AS cleaned_name
FROM FIFA.dbo.players_22;

优点是精准,缺点是需要逐个列举要替换的字符。

3. 自定义函数批量处理

如果需要处理大量重音字符,创建一个自定义函数封装替换逻辑,方便重复调用:

CREATE FUNCTION dbo.CleanAccentedChars(@input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @result NVARCHAR(MAX) = @input;
    -- 替换常见重音乱码字符
    SET @result = REPLACE(@result, 'á', 'á');
    SET @result = REPLACE(@result, 'é', 'é');
    SET @result = REPLACE(@result, 'í', 'í');
    SET @result = REPLACE(@result, 'ó', 'ó');
    SET @result = REPLACE(@result, 'ú', 'ú');
    SET @result = REPLACE(@result, 'ü', 'ü');
    SET @result = REPLACE(@result, 'ñ', 'ñ');
    -- 可根据需求继续添加其他替换规则
    RETURN @result;
END;

调用方式:

SELECT 
    short_name,
    dbo.CleanAccentedChars(short_name) AS cleaned_name
FROM FIFA.dbo.players_22;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:15:55