我有下表:
Students(id, name, surname)
Courses(course id)
Course_Signup(id, student_id, course_id, year)
Grades(signup_id, mark)
我想顯示所有學生(身份證、姓名、姓氏)及其最終成績(其中最終成績 = 所有課程成績的平均值),但僅適用于已通過所有已注冊課程的學生在當年。
這是我試過的:
SELECT s."id", s."name", s."surname", AVG(g."mark") AS "finalGrade"
FROM "STUDENT" s,
"course sign-up" csn
join "GRADES" g
on csn."id" = g."signup_id"
WHERE csn."year" >= '01-01-2022'
HAVING "finalGrade" >= 5.00
GROUP BY s."id"
但是,在添加最后兩行之后,關于finalGrade條件,我得到一個無效的識別符號錯誤。這是為什么?
uj5u.com熱心網友回復:
呃,哦。您真的使用用雙引號括起來的小寫字母名稱創建表格嗎?如果是這樣,請擺脫它們(越快越好),因為它們只會引起問題。
除此之外,統一使用連接——在你的from子句中有一個student表沒有連接到任何其他表并導致交叉連接。
不要將日期與字串進行比較;使用日期文字(就像我所做的那樣),或to_date使用適當的格式模型運行。
由于你得到的錯誤:你不能像在having子句中那樣參考運算式的別名(“finalGrade”) - 使用整個運算式。
此外,group by應包含列串列中的所有非聚合列select。
這個“修復”了你得到的錯誤,但是 - 我建議你考慮我所說的一切:
SELECT s."id", s."name", s."surname", AVG(g."mark") AS "finalGrade"
FROM "STUDENT" s,
"course sign-up" csn
join "GRADES" g
on csn."id" = g."signup_id"
WHERE csn."year" >= date '2022-01-01'
GROUP BY s."id", s."name", s."surname"
HAVING AVG(g."mark") >= 5.00
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/536557.html
標籤:数据库甲骨文加入聚合函数
上一篇:MVC-向模型添加更新功能-Node.jsExpress和MongoDB
下一篇:如何顯示昵稱而不是外鍵?
