如何获取每年的点名和最大值? (SQL)

How to get the name and maximum values of points for each year? (SQL)

到目前为止这是我的代码它在 T-SQL.

我无法添加 driver_name 列。我应该使用哪种聚合?

SELECT MAX(race_points) max_points, year, driver_name
FROM 

    (SELECT

        CONCAT(forename,' ',surname) AS driver_name,
        year,
        (CONVERT(FLOAT,points)) AS race_points     
     
    FROM 
            results AS r

            INNER JOIN constructors AS c
            ON r.constructorId = c.constructorId

            INNER JOIN drivers AS d
            ON r.driverId = d.driverId

            INNER JOIN races AS rc
            ON r.raceId = rc.raceId) AS sub
GROUP BY year;

这就是 sub 的样子

driver_name year race_points
a 2010 2
a 2011 3
b 2011 4
b 2012 3
c 2012 4

我想让它看起来像是在撒谎

driver_name year max_points
a 2010 2
b 2011 4
c 2012 4

任何帮助将不胜感激。

使用 row_number(),您可以根据对数字进行分区的方式来指定行号。如果相应地对其进行排序,则可以 select 每组中的第 1 行。

WITH cte as
(
   SELECT
     CONCAT(forename,' ',surname) AS driver_name,
     year,
     (CONVERT(FLOAT,points)) AS race_points,
     row_number() over (partition by year order by (CONVERT(FLOAT,points)) desc) as rn     
   FROM 
     results AS r    
     INNER JOIN constructors AS c ON r.constructorId = c.constructorId
     INNER JOIN drivers AS d ON r.driverId = d.driverId
     INNER JOIN races AS rc ON r.raceId = rc.raceId
)
SELECT * FROM cte 
WHERE rn = 1