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

如何正确编写SQL实现按用户汇总每门课程最高分的总和?

正确的SQL查询实现方案

原SQL的问题在于子查询和用户表没有建立正确的关联关系,且子查询无法直接引用外层查询的u.Id(这就是你遇到"The multi-part identifier 'u.Id' could not be bound"错误的原因)。以下是符合需求的正确查询结构:

实现思路

  • 先通过子查询计算每个用户每门课程的最高分,按用户ID和课程ID分组
  • 使用左连接关联用户表和子查询,保证无成绩的用户也能被查询到
  • 用ISNULL函数将无成绩用户的总分转换为0

完整SQL语句

SELECT 
    u.Id AS User_Id,
    u.UserName AS User_Name,
    ISNULL(SUM(x.maxScores), 0) AS Total_Score
FROM Users AS u
LEFT JOIN (
    -- 子查询:计算每个用户每门课程的最高分
    SELECT 
        s.UserId,
        MAX(s.Score) AS maxScores
    FROM Scores AS s
    INNER JOIN Courses AS c ON s.CourseId = c.Id
    GROUP BY s.UserId, c.Id
) AS x ON u.Id = x.UserId
GROUP BY u.Id, u.UserName
-- 如果需要限制前3条结果,取消下面注释
-- TOP(3)

关键说明

  • LEFT JOIN确保所有用户(包括无成绩的)都出现在结果集中
  • ISNULL(SUM(x.maxScores), 0)处理无成绩用户的情况:当用户没有对应分数记录时,SUM(x.maxScores)会返回NULL,用ISNULL转换为0
  • 子查询和用户表通过u.Id = x.UserId建立关联,解决了原语句中无法动态关联用户ID的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:46:28