2017-04-15 2 views
0

wird.Wie so zwei SQL-Abfragen kombinieren, dass die Ausgabe einer Abfrage eine Bedingung für eine andere

select course from course_enrolments group by course having count(student)<20; 

Dies gibt die Kurse mit weniger als 20 eingeschriebenen Studenten zurück.

Wie kann ich beide Teilnehmer kombinieren, so dass ich Namen von Teilnehmern mit 20 oder mehr Angeboten und weniger als 20 eingeschriebenen Studenten bekommen kann?

Courses.id = Course_enrolment.course verwendet werden können, um Tabellenplätze und Course_enrolments

Jede Hilfe wird geschätzt zu verbinden.

Antwort

0

Versuchen Sie folgendes:

select a.name 
from Subjects a join Courses b on(a.id=b.subject) 
where b.id in (select course 
    from course_enrolments 
    group by course 
    having count(student)<20 
) 
group by a.name 
having count(b.id) >=20; 
+0

Werke !! Vielen Dank –

+0

auch, ich wollte etwas wie a.code ausgeben || '|| a.name statt nur a.name. Wenn ich das setze, gibt es mir einen Fehler, der besagt, dass a.code der Gruppe hinzugefügt werden soll. Wenn ich es zur Gruppe hinzufüge, gibt es eine falsche Ausgabe. Wie kann ich das beheben? –

+0

Ich mache so etwas wie Gruppe von a.code, a.name, die falsche Ausgabe liefert –

0

Try this:

SELECT 
FROM (SELECT a.name, 
     b.id as courseid 
    FROM Subjects a 
    JOIN Courses b 
     ON a.id = b.subject 
    GROUP BY a.name 
    HAVING count(a.id) >= 20) s 
JOIN (SELECT course 
    FROM course_enrollments ce 
    GROUP BY course 
    HAVING count(*) < 20) c 
ON c.course = s.courseid 
Verwandte Themen