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

特定国家得分距领跑者500分以内的球员数量统计SQL查询问题排查

解决统计各国得分接近领跑者球员数量的问题

你的需求是统计每个国家中,得分与该国最高分差距在500分以内的球员数量,但原SQL语句的逻辑存在问题,导致无法得到预期结果。

原语句的问题分析

原语句中的where runs >= All (select max(runs)-500 from [dbo].[Sheet1$] group by country )这部分逻辑错误:

  • 子查询select max(runs)-500 from [dbo].[Sheet1$] group by country会返回所有国家的「最高分-500」的数值集合
  • 使用>= All意味着要求球员得分同时大于等于所有国家的「最高分-500」,这显然不是你想要的——你需要的是球员得分大于等于自己所在国家的「最高分-500」

正确的解决方案

方案1:使用窗口函数(推荐,性能更优)

窗口函数可以直接为每个球员计算出其所在国家的最高分,然后筛选符合条件的记录再统计:

SELECT 
    country,
    COUNT([Player]) AS no_of_players
FROM (
    SELECT 
        [Player],
        country,
        runs,
        MAX(runs) OVER (PARTITION BY country) AS country_max_runs
    FROM [dbo].[Sheet1$]
) AS player_stats
WHERE runs >= country_max_runs - 500
GROUP BY country

方案2:使用关联子查询

通过关联子查询获取每个国家的最高分,再进行筛选统计:

SELECT 
    country,
    COUNT([Player]) AS no_of_players
FROM [dbo].[Sheet1$] AS p
WHERE runs >= (
    SELECT MAX(runs) - 500 
    FROM [dbo].[Sheet1$] 
    WHERE country = p.country
)
GROUP BY country

这两种方法都会为每个球员匹配其所在国家的最高分阈值,筛选出得分差距在500以内的球员后,按国家统计数量,就能得到你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:37:32