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

Oracle结合子查询与聚合函数查询中场球员最多的世界杯国家

解决思路与正确SQL实现

先分析你两个查询的问题

  • 第一个查询:外层GROUP BY nationname统计的是该国所有位置的球员总数,但子查询统计的是各国中场球员数的最大值,两者统计维度完全不同,所以永远匹配不到结果,自然无输出。另外DISTINCT是多余的,GROUP BY已经确保每行对应唯一国家。
  • 第二个查询:外层GROUP BY nationname后,MAX(midfield)本质就是子查询里每个国家自身的中场数,相当于没做筛选,只会返回所有国家的中场球员数,无法定位最大值对应的国家。

两种可行的Oracle实现方案

方案1:先统计中场数,再匹配最大值

先用子查询统计每个国家的中场球员数,再找出这个统计结果里的最大值,最后筛选出数值等于最大值的国家:

WITH nation_midfield AS (
    SELECT nationname, COUNT(*) AS midfield_count
    FROM Player
    WHERE Role = 'midfield'
    GROUP BY nationname
)
SELECT nationname, midfield_count
FROM nation_midfield
WHERE midfield_count = (SELECT MAX(midfield_count) FROM nation_midfield);

方案2:用窗口函数处理(支持并列情况)

如果存在多个国家中场球员数相同且都是最多的情况,用RANK()窗口函数可以一次性返回所有并列第一的国家:

SELECT nationname, midfield_count
FROM (
    SELECT nationname, COUNT(*) AS midfield_count,
           RANK() OVER(ORDER BY COUNT(*) DESC) AS rnk
    FROM Player
    WHERE Role = 'midfield'
    GROUP BY nationname
)
WHERE rnk = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:57:14