用于获取每年最大本垒打的SQL查询

时间:2017-10-20 20:08:30

标签: sql

在数据库中,我们有表batter,其中包含每年击球的每个击球手的记录以及他们当年的比赛统计数据。如何编写查询以从所有玩家中选择具有最大本垒数的每个玩家?

我一直在尝试

SELECT *
FROM master
WHERE batting.HR = (
    SELECT MAX(batting.HR)
    FROM batting
)

但是没有运气。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

SELECT b.* 
FROM batter b
INNER JOIN (
   select year, Max(hr) as MaxHR
   from batter
    group by year
) y on b.year = y.year and b.HR = y.MaxHR

请注意,这很容易让两名球员联系。在这种情况下,你不清楚你想看到什么。

答案 1 :(得分:1)

假设您的RDBMS支持SQL2003,您可以使用窗口函数:

SELECT *
FROM
(
    SELECT
        batter,
        year,
        hr,
        MAX(hr) OVER (PARTITION BY year) AS year_best_hr
    FROM batting
)
WHERE hr = year_best_hr