Frage von M1keL3, 24

SQL-Plus Datenbanken, wer kann mir helfen?

Muss die Aufgabe 4 lösen die im zusammenhang mit Aufgabe 3 hängt :

Aufgabe 3 Geben Sie mit einer Select-Anweisung eine Tabelle mit allen Abteilungen aus. Sie soll außer Nummer und Name der Abteilung auch noch die Anzahl der Mitarbeiter, das minimale, maximale und durchschnittliche Gehalt jeder Abteilung enthalten.

Aufgabe 4 Verfahren Sie zunächst wie in Aufgabe 3. Der Chef der Firma soll aber in einer getrennten Zeile der ausgegebenen Tabelle erscheinen. Dabei soll die Spalte mit dem Abteilungsnamen den Eintrag Chef erhalten.

Aufgabe 3 konnte ich bereits lösen aber komme nicht dahinter wie ich den Chef als neue Spalte hinzufüge, hoffe mir kann jemand helfen die Anweisung zu vervollständigen.

Meine Lösung zu Aufgabe 3 ist :

select dept.deptno DepNummer,dname DepName,min(sal) MinGehalt,avg(sal) DurchschnGehalt,max(sal) MaxGehalt,count(empno) AnzMitarbeiter from scott.dept inner join emp on (dept.deptno=emp.deptno) where mgr is not null group by dept.deptno,dname

Antwort
von Suboptimierer, 24

Mach doch einfach einen UNION. 

UNION SELECT dept.deptno DepNummer, 'Chef' as DepName...

Kommentar von M1keL3 ,

Danke dir schonmal ! muss ich dann das selbe wie oben eingeben nur mit dem eintrag als Chef hinzufügen oderwie? hab jetzt einfach mal 1:1 übertragen um zu schauen was passiert jetzt habe ich mehrere Chef spalten anstatt nur einer, wie kann ich das optimieren bzw was brauche ich in der zweiten select nicht zu übernehmen ?

Kommentar von Suboptimierer ,

Ein UNION kittet das Ergebnis eines zweiten SELECT-Befehls einfach an das erste Ergebnis ran. Die Spalten müssen gleich betitelt sein, Gruppierungen kannst du separat durchführen (ohne Gewähr).

Kommentar von M1keL3 ,

ich denke ich habe nun die Lösung, sieht zumindest schonmal ganz gut aus :)

select dept.deptno DepNummer,dname DepName,min(sal) MinGehalt,avg(sal) DurchschnGehalt,max(sal) MaxGehalt,count(empno) AnzMitarbeiterfrom scott.dept inner join empon (dept.deptno=emp.deptno) where mgr is not nullgroup by dept.deptno,dname unionselect dept.deptno DepNummer,'Chef' as dname,min(sal) MinGehalt,avg(sal) DurchschnGehalt,max(sal) MaxGehalt,count(empno) AnzMitarbeiterfrom scott.dept inner join empon (dept.deptno=emp.deptno) where mgr is null group by dept.deptno,dname

habe dann im zweiten select anstatt mgr is not null => mgr is null übernommen und es funktioniert, danke dir !

Kommentar von Suboptimierer ,

Bitteschön!

Kommentar von M1keL3 ,

Naja muss noch zwei Aufgaben erledigen und wo wir gerade beim Thema sind, kannst du mir Hilfestellung geben ?

Aufgabe 5:

Mit einer Select-Anweisung sollen alle Mitarbeiter ausgegebenwerden, die mindestens zwei Untergebene haben.

Aufgabe 6:

Geben Sie mit einer Select-Anweisung Personalnummer und Namealler Mitarbeiter aus, die keine Untergebenen haben. Lösen Siedie Aufgabe mit einer Subquery und alternativ mit Hilfe vonMengenoperationen. Die Ausgabe soll nach der Personalnummersortiert sein.

habe sämtliche Foren durchforstet aber finde nie wirklich hilfreiche befehle bzw. Hilfestellungen..

Kommentar von Suboptimierer ,

Skizze 5: select mitarbeiter ... group by 1 having count(untergebene)>=2

untergebene kann wiederum eine Abfrage oder Teil eines Joins sein.

Skizze 6: select a.empno, a.name from mitarbeiter a where (select count(*) from mitarbeiter b where b.mgr = a.empno) = 0

oder 

select a.empno, a.name from mitarbeiter a where a.empno not in (select distinct b.mgr from mitarbeiter b)

select a.empno, a.name from mitarbeiter a left join mitarbeiter b on a.empno = b.mgr where b.mgr is not null

(alles ungetestet)

Kommentar von M1keL3 ,

danke dir, ich werds mal ausprobieren !

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten