1. Abfrage

Anzahl der Neuzugänge pro Jahr

select YEAR_JOINED, count(*) as Amount
from PLAYERS
group by YEAR_JOINED
order by 1;

2. Abfrage

Anzahl und durchschnittliche Höhe der Strafen pro Spieler

select (PLAYERNO), count(*) as Anzahl, round(avg(AMOUNT), 2) as Average
from PENALTIES
group by PLAYERNO;

select NAME from PLAYERS
where PLAYERNO in (
select PLAYERNO
from PENALTIES
group by PLAYERNO);

3. Abfrage

Anzahl der Strafen für die Jahre vor 1983

select TO_CHAR(PEN_DATE, 'yyyy') as Year, count(*) as Amount
from PENALTIES
where TO_CHAR(PEN_DATE, 'yyyy') < 1983
group by TO_CHAR(PEN_DATE, 'yyyy');

4. Abfrage

In welchen Städten leben mehr als 4 Spieler

select TOWN, count(*)
from PLAYERS
group by TOWN
having count(*) > 4;

5. Abfrage

PLAYERNO derjenigen Spieler, deren Strafensumme über 150 liegt

select PLAYERNO, sum(AMOUNT)
from PENALTIES
group by PLAYERNO
having sum(AMOUNT) > 150;

6. Abfrage

NAME und INITIALS derjenigen Spieler, die mehr als eine Strafe erhalten haben

select NAME, INITIALS
from PLAYERS
where PLAYERNO in (
select PLAYERNO
from PENALTIES
group by PLAYERNO
having count(*) > 1);

7. Abfrage

In welchen Jahren gab es genau 2 Strafen

select TO_CHAR(PEN_DATE, 'yyyy'), count(*)
from PENALTIES
group by TO_CHAR(PEN_DATE, 'yyyy')
having count(*) = 2;

8. Abfrage

NAME und INITIALS der Spieler, die 2 oder mehr Strafen über $40 erhalten haben

Ohne Joins
select NAME, INITIALS
from PLAYERS
where PLAYERNO in(
select PLAYERNO
from PENALTIES
where AMOUNT > 40
group by PLAYERNO
having count(*) >= 2);
Mit Joins
select pl.NAME, pl.INITIALS
from PLAYERS pl, PENALTIES pe
where pl.PLAYERNO = pe.PLAYERNO and AMOUNT > 40
group by pl.NAME, pl.INITIALS
having count(*) >= 2

9. Abfrage

NAME und INITIALS des Spielers mit der höchsten Strafensumme

Ohne Joins
select NAME, INITIALS
from PLAYERS
where PLAYERNO in (
select PLAYERNO
from PENALTIES
group by PLAYERNO
having sum(AMOUNT) = (
select max(sum(AMOUNT))
from PENALTIES group by PLAYERNO));
Mit Joins
select NAME, INITIALS
from PLAYERS pl, PENALTIES pe
where pe.PLAYERNO = pl.PLAYERNO
group by pl.name, pl.INITIALS
having sum(AMOUNT) = (
select max(sum(AMOUNT))
from PENALTIES group by PLAYERNO);

10. Abfrage

In welchem Jahr gab es die meisten Strafen und wie viele waren es

select TO_CHAR(PEN_DATE, 'yyyy')  as YEAR, count(*) as PENALTIES
from PENALTIES
group by TO_CHAR(PEN_DATE, 'yyyy')
having count(*) = (
    select max(count(*))
    from PENALTIES
    group by TO_CHAR(PEN_DATE, 'yyyy'));

11. Abfrage

PLAYERNO, TEAMNO, WON - LOST sortiert nach letzterem

select PLAYERNO, sum(WON) - sum(LOST)
from MATCHES
group by PLAYERNO;

12. Abfrage

Ausgabe aller Mitarbeiter aus Abteilung 30 geordnet nach ihrem Gehalt beginnend mit dem höchsten Gehalt

select *
from EMP
where DEPTNO = 30
order by SAL desc;

13. Abfrage

Ausgabe aller Mitarbeiter geordnet nach Job und innerhalb des Jobs nach ihrem Gehalt

select *
from EMP
order by JOB, SAL;

14. Abfrage

Ausgabe aller Mitarbeiter geordnet nach ihrem Anstellungsjahr absteigend und innerhalb des Jahres nach ihrem Namen

select *
from EMP
order by HIREDATE desc, ENAME;

15. Abfrage

Ausgabe aller Verkäufer in absteigender Reihenfolge bezüglich dem Verhältnis Provision zu Gehalt

select *
from EMP
order by SAL - nvl(COMM, 0);

16. Abfrage

Ausgabe des Durchschnittsgehalts zu jeder Abteilungsnummer

select DEPTNO, round(avg(SAL), 2) as Durchschnittsgehalt
from EMP
group by DEPTNO;

17. Abfrage

Berechne die durchschnittlichen Jahresgehälter derjenigen Jobs, die von mehr als 2 Mitarbeitern ausgeführt werden

select JOB, round(avg(SAL), 2) as AVGSAL
from EMP
group by JOB
having count(*) > 2;

18. Abfrage

Ausgabe aller Abteilungsnummern mit mindestens 2 Büroangestellten

select DEPTNO
from EMP
group by DEPTNO
having count(*) > 2;

19. Abfrage

Gesucht ist der durchschnittliche Wert für Gehalt und Provision aller Mitarbeiter aus Abteilung 30

select round(avg(SAL), 2) as AVGSAL, round(avg(nvl(COMM, 0)), 2) as AVGCOMM
from EMP
where DEPTNO = 30;