2016-11-06 177 views
0

鑑於以下模式,我應該爲這些問題編寫查詢。編寫SQL查詢需要幫助(連接,子查詢)

我的第一個查詢運行但我沒有得到結果,第二個查詢出現subquery returns more than one row錯誤。

student (sid, sname, sex, birthdate, gpa) 
prof (pname, dname) 
course (cnum, dname, cname) 
section (cnum, secnum, pname) 
enroll (sid, cnum, secnum, grade) 
  1. 對於每門課程,返回段(numsections)的數量,學生的總入學人數(numstudents),平均品位(avggrade),以及不同的教授誰教課程的數量(numprofs) 。只顯示化學或計算機科學系的課程。確保顯示課程,即使他們沒有學生。如果沒有教授教授課程,不要顯示課程。

  2. 返回至少兩門課程中獲得高於其課程部分平均成績的學生。通過比平均水平和課程編號順序只顯示前5

SQL查詢:

SELECT C.cnum, C.cname, COUNT(*) AS numsections, COUNT(E.sid) AS numstudents, 
AVG(E.grade) AS avggrade, COUNT(P.pname) AS numprofs 
FROM course C 
    JOIN section S ON C.cnum = S.cnum 
    JOIN enroll E ON C.cnum = E.cnum 
    JOIN prof P ON S.pname = P.pname 
WHERE C.cname = 'Chemistry' OR C.cname = 'Computer Science' 
GROUP BY C.cnum, C.cname;` 


SELECT S.sid, S.sname 
FROM student S 
    LEFT JOIN enroll E ON S.sid = E.sid 
WHERE E.grade > (SELECT AVG(grade) 
       FROM course C JOIN enroll E2 
       ON C.cnum = E2.cnum 
       GROUP BY C.cnum 
       LIMIT 5);` 
+2

請仔細閱讀[**如何對向**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是一個偉大的地方,[** **開始執行](http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)瞭解如何提高您的問題質量並獲得更好的答案。 –

回答

0

關於第二個查詢...

你的子查詢獲得超過1數據行。要使用「<」,你需要確保你只帶1行,只有1列。

如果我理解正確的話,你只需要顯示前5位的學生順序的次數是比課程的平均水平好。我真的這是一個學習的例子,所以它不會幫助,如果我給您查詢..

您需要選擇前5名的學生,但要知道,你必須COUNT()的次數,他們GRADEAVG(大於)每個當然,他們已經採取了,在你的子查詢中的某個時刻,你應該按照他們達到平均數以上的次數排列學生名單。