查找最佳击球手位置的最大平均运行-Oracle SQL

问题描述

请帮助实现这一期望, 我有一张叫蝙蝠侠的桌子。每个击球手在每场比赛中的位置都不同。 我想找到击球手的哪个位置在哪个位置有最大的平均跑分。 请参考下面的示例表,并帮助我使用sql

Name   | Position  | Runs
------------------------------
Dhoni  | 1         | 2
Kholi  | 1         | 50
Dhoni  | 2         | 23
Kholi  | 2         | 30
Dhoni  | 3         | 25
Kholi  | 3         | 12
Dhoni  | 1         | 12
Kholi  | 1         | 80
Dhoni  | 2         | 15
Kholi  | 2         | 30
Dhoni  | 3         | 60
Kholi  | 3         | 2

解决方法

您可以使用聚合和窗口功能进行排名:

select t.*
from (select name,position,avg(runs) as avg_runs,row_number() over (partition by name order by avg(runs) desc) as seqnum
      from t 
     ) t
where seqnum = 1;
,

如果您不需要先运行density_rank来进行平均运行,则可以获得相同的结果:

SQLFIDDLE

select name,max(position) keep (dense_rank first order by avg_run desc)
from (
select name,avg(runs) avg_run from table1 group by name,position)
group by name order by name;