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

Find the Maximum Average run of best Batsman's Position -Oracle SQL

请帮忙解决这个问题, 我有一个 table 叫击球手。每个击球手在每场比赛中都在不同的位置上比赛。 想要找到击球手的哪个位置在哪个位置具有最大平均数 运行。 请参考下面的例子 table 并帮助我 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

您可以使用聚合和 window 函数进行排名:

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;

如果不需要平均运行次数,首先使用 dense_rank 可以获得相同的结果:

SQLFIDDLE

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