2017-02-07 1 views
1

Es gibt zwei relevante Tabellen: works_on und project. Das Projekt enthält die folgenden Attribute: PName, PNo, PLocation und DNo (Abteilungsnummer). Works_on enthält die folgenden Attribute: SSN, PNo, Stunden.Projektnummer, Projektname und Anzahl der Mitarbeiter für alle Projekte auflisten> 2 Mitarbeiter daran arbeiten

Ich möchte nur die SSNs zählen, die mehr als zweimal erscheinen und dann den Zählwert, PName und PNo.

Dies ist mein Versuch so weit:

SELECT 
    P.PNo, P.PName, 
    COUNT(W.SSN) AS no_employees 
FROM 
    project AS P INNER JOIN works_on AS W ON P.PNO = W.PNo 
WHERE W.SSN IN (SELECT SSN FROM WORKS_ON GROUP BY SSN HAVING COUNT(SSN) > 2) 
GROUP BY P.PNo 

aber ich habe die falschen PNr ist und die falsche Anzahl von Mitarbeitern. Ich habe versucht herauszufinden, warum dieser Code mir keine Projekte mit mehr als zwei Angestellten geben wird. Bitte hilf mir herauszufinden, was ich falsch mache.

Antwort

2

Sie brauchen keine innere Abfrage, group by mit having tun sollten, z.B .:

SELECT p.no, p.name, COUNT(w.ssn) as employees 
FROM project p JOIN works_on w ON p.pno = w.pno 
GROUP BY p.no, p.name 
HAVING employees > 2; 
+0

Sie so viel Dank! – mathStudent1936

+0

Noch immer nicht sicher, warum wir Ihre Hausaufgaben machen. War das Teil der Aufgabe? – Strawberry

+0

Ich bin schon seit ein paar Stunden dabei, also denke ich, wenn ich hier herauskomme, bitte ich Sie nicht, meine Hausaufgaben zu machen, sondern bitte um Einsicht oder Hilfe. Ich bin neu in SQL und versuche, aus meinen Fehlern zu lernen. Ich bin mir wirklich nicht sicher, warum Sie unsere Zeit verschwenden, ohne uns zu helfen. – mathStudent1936

Verwandte Themen