2016-11-06 6 views
0

Gegeben das folgende Schema, ich soll Abfragen für die Fragen schreiben.Benötigen Sie Hilfe beim Schreiben von SQL-Abfragen (Joins, Unterabfragen)

Meine erste Abfrage läuft, aber ich bekomme kein Ergebnis und die zweite gibt den subquery returns more than one row Fehler.

student (sid, sname, sex, birthdate, gpa) 
prof (pname, dname) 
course (cnum, dname, cname) 
section (cnum, secnum, pname) 
enroll (sid, cnum, secnum, grade) 
  1. Für jeden Kurs, geben die Anzahl der Abschnitte (numsections), die Gesamtzahl der Studierenden (numstudents), Durchschnittsnote (avggrade) und Anzahl der verschiedenen Professoren, die den Kurs gelehrt (numprofs) . Nur Kurse in Chemie oder Informatik anzeigen. Stellen Sie sicher, dass Kurse auch dann angezeigt werden, wenn sie keine Schüler haben. Zeigen Sie keinen Kurs, wenn keine Professoren diesen Kurs unterrichten.

  2. Geben Sie die Schüler zurück, die in mindestens zwei Kursen eine höhere Note als der Durchschnitt ihres Kursabschnitts erhalten haben. Sortieren nach Anzahl der Kurse höher als der Durchschnitt und zeigen nur Top 5.

SQL-Abfrage:

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

Bitte lesen Sie [** How-to-Frage **] (http://stackoverflow.com/help/how-to-ask) \t \t Und hier ist ein toller Ort, um [** START ** ] (http://spaghettiba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) um zu erfahren, wie Sie die Qualität Ihrer Fragen verbessern und bessere Antworten erhalten. –

Antwort

0

Über die zweite Abfrage ...

Ihre Unterabfrage wird immer mehr als 1 Reihe von Daten. Um "<" zu verwenden, müssen Sie sicher sein, dass Sie nur 1 Reihe und nur 1 Spalte mitbringen.

Und wenn ich richtig verstehe, müssen Sie nur die Top-5-Studenten Reihenfolge nach der Anzahl der Zeiten sind besser als der Durchschnitt des Kurses .. Ich denke, dies ist ein Lernbeispiel, so wird es nicht helfen, wenn ich gebe Sie die Abfrage ..

Sie müssen die Top-5-Studenten wählen, aber zu wissen, dass Sie zu COUNT() die Anzahl der Male, dass ihre GRADE war größer als die AVG() jeder Natürlich haben sie genommen, irgendwann in Ihrer Unterabfrage sollten Sie die Liste der Studenten bestellen, wie oft sie über dem Durchschnitt sind.

Verwandte Themen