【问题标题】:How to get the name and maximum values of points for each year? (SQL) [duplicate]如何获取每年的积分名称和最大值? (SQL) [重复]
【发布时间】:2021-11-13 07:59:16
【问题描述】:

这是我目前的代码,它在 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

任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server group-by aggregate-functions


    【解决方案1】:

    使用row_number(),您可以根据您对数字进行分区的方式为您的行编号。如果您对它进行相应的排序,您可以从每个组中选择第 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
    

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 2022-10-04
      • 2021-04-17
      • 2017-09-12
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多