You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用T-SQL查询每年总积分最高的车手姓名及对应最大积分值

问题原因

原代码未先按车手+年度聚合累计积分,直接基于单场比赛积分排序,因此只能得到单场最高分的条目。


正确实现代码

WITH yearly_total AS
(
   -- 第一步:统计每个车手每年度的累计总积分
   SELECT
     CONCAT(d.forename,' ',d.surname) AS driver_name,
     rc.year,
     SUM(CONVERT(FLOAT, r.points)) AS total_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
   GROUP BY CONCAT(d.forename,' ',d.surname), rc.year
),
ranked_drivers AS
(
   -- 第二步:对每年度的车手按累计积分倒序排名
   SELECT 
     driver_name,
     year,
     total_points AS max_points,
     ROW_NUMBER() OVER (PARTITION BY year ORDER BY total_points DESC) AS rn
     -- 若需要展示同一年度积分并列第一的所有车手,将上方ROW_NUMBER替换为RANK()即可
   FROM yearly_total
)
-- 取每年度排名第一的记录
SELECT driver_name, year, max_points 
FROM ranked_drivers 
WHERE rn = 1

逻辑说明

  1. 第一层CTE yearly_total 先按车手姓名、年度分组,对每场比赛的积分求和,得到每个车手每年度的总积分
  2. 第二层CTE ranked_drivers 以年度为分区,按车手年度总积分倒序排名
  3. 最后筛选出每年度排名第一的记录,即可得到期望的年度积分最高车手及对应总积分

内容的提问来源于stack exchange,提问作者Meital Meyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:54:03