首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle:组合子查询和聚合函数

Oracle:组合子查询和聚合函数
EN

Stack Overflow用户
提问于 2022-07-18 06:06:23
回答 2查看 30关注 0票数 0

我对数据库和甲骨文都很陌生,我应该在一张摆满世界杯所有球队的桌子上找到,这些国家的中场球员都是最多的。这是表格的结构:

代码语言:javascript
复制
Player(PlayerID<PK>,Role,Nationname)

我承认,我并不真正了解子查询如何与聚合函数协同工作。我试图像这样在表中找到最大的中场数量,但是我没有得到任何输出:

代码语言:javascript
复制
SELECT DISTINCT nationname, count(role)
FROM player
GROUP BY nationname
HAVING COUNT(role) = (SELECT max(count(role))
                   FROM player
                   WHERE role = 'midfield'
                   GROUP BY nationname);

我还尝试使用FROM子句中的子查询(我在这个站点上看到许多人使用这种子查询)如下:

代码语言:javascript
复制
SELECT nationname, MAX(midfield) FROM 
( SELECT nationname, COUNT(role) midfield
  FROM player
  WHERE role = 'midfield'
  GROUP BY nationname) test
  GROUP BY nationname;

输出:

有了这个查询,我越来越接近任务,但我不能进一步过滤结果,以便只得到洪都拉斯队。

我能为它做些什么?我真的很感激任何提示或帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-18 06:18:51

在内部查询中,选择并分组,然后在按计数的角色排序时可以选择第一行。

代码语言:javascript
复制
select *
from (SELECT nationname, COUNT(role) midfield
      FROM player
      WHERE role = 'midfield'
      GROUP BY nationname)
where rownum = 1
order by midfield desc

如果有多个国家在中场位置上拥有相同的最大球员数量,请使用以下方法:

代码语言:javascript
复制
SELECT nationname, COUNT(role) midfield
FROM player
WHERE role = 'midfield'
GROUP BY nationname
having count(role) in (select max(count(role)) 
                       from player 
                       where role = 'midfield' 
                       group by nationname)

演示

票数 1
EN

Stack Overflow用户

发布于 2022-07-18 06:17:27

如果您使用rank解析函数(为什么不使用row_number )?因为两支(或更多)球队可以拥有相同数量的中场球员),所以你可以。

代码语言:javascript
复制
with temp as
  -- rank them first, by count of midfield players in descending order
  (select nationname, 
          rank() over (order by count(*) desc) rnk, 
          count(*) cnt
   from player
   where role = 'midfield'
   group by nationname
  )
-- now, fetch nation which ranks as the highest
select nationname, cnt
from temp
where rnk = 1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73017920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档