[英]SQL Expression missing error
我試圖從一個表中選擇其他表中其他表的列的平均值; 架構如下。
學生 ( sid
, firstname
,l astname
, status
, gpa
, email
)
報名 ( sid
, classid
, lgrade
)
等級 ( lgrade
, ngrade
)
而錯誤的查詢是,
select sid, lastname,
avg( select g.ngrade from grades g, enrollments e
where e.sid = sid and g.lgrade = e.lgrade and e.lgrade is not null
and g.ngrade is not null) as cgpa
from students
order by cgpa asc;
從子查詢中取出分號。
有幾個問題:
avg()
函數的括號。 GROUP BY
子句。 總而言之,我認為聚合應該在括號內。
嘗試:
select
sid,
lastname,
(
select avg(g.ngrade)
from grades g, enrollments e
where e.sid = sid and g.lgrade = e.lgrade
and g.ngrade is not null
) as cgpa
from students
order by cgpa asc;
其他說明: e.lgrade is not null
沒有必要的,因為條件g.lgrade = e.lgrade
已經確保了它不會是空。
最后,我鼓勵您學習ANSI連接語法。 你以后會感謝我的。 說真的,使用舊式連接很糟糕。
select
s.sid,
s.lastname,
(
select avg(g.ngrade)
from
grades g
inner join enrollments e
on g.lgrade = e.lgrade
where
g.ngrade is not null
and s.sid = g.sid
) as cgpa
from students s
order by cgpa asc;
事實上,我懷疑只是以這種方式重寫查詢將有助於揭示它的錯誤 - 它在我看來可能是grades
和enrollments
需要另一個連接條件?
兩個INNER JOIN
沒有sub-queries
- 請嘗試。
SELECT s.sid, s.lastname, avg(g.ngrade) cgpa
FROM Students s
JOIN Enrollments e ON s.sid = e.sid
JOIN Grades g ON e.lgrade=g.lgrade
GROUP BY s.sid, s.lastname
ORDER BY 3;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.