我有 3 張桌子
用戶表
| ID | 姓名 |
|---|---|
| 1 | 麥克風 |
| 2 | 山姆 |
評分表
| ID | 用戶身份 | 課程編號 | 分數 |
|---|---|---|---|
| 1 | 1 | 1 | 5 |
| 2 | 1 | 1 | 10 |
| 3 | 1 | 2 | 5 |
課程表
| ID | 姓名 |
|---|---|
| 1 | 課程 1 |
| 2 | 課程 2 |
我要回傳的是每個用戶的行,以顯示用戶 ID 和用戶名以及該用戶每門課程的最高分數總和
在示例表中,我想看到的輸出是
結果
| 用戶身份 | 用戶名 | 總得分 |
|---|---|---|
| 1 | 麥克風 | 15 |
| 2 | 山姆 | 0 |
到目前為止我嘗試過的 SQL 是:
select TOP(3) u.Id as User_Id, u.UserName as User_Name, SUM(maxScores) as Total_Score
from Users as u,
(select 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
) x
group by u.Id, u.UserName
我想在子查詢中的 group by 之后使用 having 子句將用戶鏈接到分數,但我得到一個例外說:
無法系結多部分識別符號“u.Id”
如果我在要添加的having子句中硬編碼用戶ID,它可以作業,但它需要是動態的,我被困在如何做到這一點
構建查詢的正確方法是什么?
uj5u.com熱心網友回復:
你很接近,你只需s.UserId要從子查詢回傳并將子查詢正確加入你的Users表(我已經以相反的順序加入你,因為對我來說從基礎資料開始然后加入更合乎邏輯根據需要提供更多詳細資訊)。注意別名的范圍,即子查詢中的別名在外部查詢中不可用。
select u.Id as [User_Id], u.UserName as [User_Name]
, sum(maxScore) as Total_Score
from (
select s.UserId, max(s.Score) as maxScore
from Scores as s
inner join Courses as c on s.CourseId = c.Id
group by s.UserId, c.Id
) as x
inner join Users as u on u.Id = x.UserId
group by u.Id, u.UserName;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/528464.html
標籤:sqlsql服务器
下一篇:如何用不同的值更新同一列
