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

跨表查询赛事中最年轻澳大利亚运动员SQL返回空行求助

问题排查与正确实现方案

原问题场景

需要查询赛事中最年轻的澳大利亚运动员,但编写的SQL执行后返回空行,原代码如下:

SELECT AthleteName, Age
FROM Athletes
JOIN Countries ON Countries.CountryID = Athletes.CountryID
WHERE CountryName = 'Australia'
AND Age = (SELECT MIN(Age) FROM Athletes)

问题排查

原SQL的核心错误在于子查询SELECT MIN(Age) FROM Athletes计算的是所有运动员的全局最小年龄,但这个年龄对应的运动员大概率不是澳大利亚籍的。当澳大利亚没有运动员达到这个全局最小年龄时,自然返回空结果。

正确实现方案

方案1:先计算澳大利亚运动员的最小年龄再匹配

SELECT AthleteName, Age
FROM Athletes
JOIN Countries ON Countries.CountryID = Athletes.CountryID
WHERE CountryName = 'Australia'
AND Age = (
    -- 仅计算澳大利亚运动员的最小年龄
    SELECT MIN(Age)
    FROM Athletes
    JOIN Countries ON Countries.CountryID = Athletes.CountryID
    WHERE CountryName = 'Australia'
)

方案2:使用窗口函数(支持MySQL 8+、PostgreSQL等)

如果存在多名同年龄的最年轻澳大利亚运动员,该方案可以一次性返回所有符合条件的记录:

SELECT AthleteName, Age
FROM (
    SELECT 
        AthleteName, 
        Age,
        -- 给澳大利亚运动员按年龄升序排名
        RANK() OVER(PARTITION BY Countries.CountryID ORDER BY Age ASC) AS age_rank
    FROM Athletes
    JOIN Countries ON Countries.CountryID = Athletes.CountryID
    WHERE CountryName = 'Australia'
) AS ranked_athletes
WHERE age_rank = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:38:13