簡體   English   中英

SQL表達式缺失錯誤

[英]SQL Expression missing error

我試圖從一個表中選擇其他表中其他表的列的平均值; 架構如下。

學生sidfirstname ,l astnamestatusgpaemail

報名sidclassidlgrade

等級lgradengrade

而錯誤的查詢是,

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;

事實上,我懷疑只是以這種方式重寫查詢將有助於揭示它的錯誤 - 它在我看來可能是gradesenrollments需要另一個連接條件?

兩個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM