首页 > 解决方案 > SQL 查询以获取每年表现最佳的统计数据(例如 3 个指针)

问题描述

我有一张桌子,上面有每年的球员和一些统计数据。例如(player_key、player_name、year、3point_trials、3point_score)

我希望每年的表现最好(3point_score/3point_trials)。如果他们中的两个具有相同的百分比,那么盈亏平衡点就是 3point_trials,谁有最多的试验。

产量将是每年

Name, Year, %score, trials
Player1 2000 55 1200
Player2 2001 61 1001
Player1 2002 54 978
Player6 2003 63 1034
Player5 2004 59 1132
.....

此输出的 SQL 查询是什么?

标签: sqlmaxgreatest-n-per-group

解决方案


我会推荐窗口功能:

select p.*
from (
    select p.*, 100.0 * 3point_score / 3point_trials score_percent,
        rank() over(partition by year order by 100.0 * 3point_score / 3point_trials desc, 3point_trials desc) rn
    from players p
) p
where rn = 1
order by year, rn

推荐阅读