In der letzten Sitzung haben wir die Übungen 07_1 (nur bis E), 07_2 und 07_3 auf dieser Seite gemacht: MySQL: Aggregatfunktionen, rechnen. Beachten Sie bitte, dass alle Anwesenden diese Übungen erfolgreich begangen haben.

Wenn Sie nicht da waren, machen Sie diese Übungen unbedingt, wir werden in der nächsten Sitzung direkt weitermachen.

Wenn Sie da waren, bleibt es Ihnen überlassen, ob Sie die Übungen noch einmal wiederholen. Es folgen die Lösungen.

-- Aufgabe 07_1

-- A
SELECT COUNT(*) FROM kunde;
-- B
SELECT COUNT(*) FROM ort;
-- C
SELECT COUNT(*) FROM kunde WHERE kontostand_giro > 2000;
-- C1
SELECT group_concat(name) FROM kunde AS kunde_mit_kontostand_groesser_2000 WHERE kontostand_giro > 2000;
-- D
SELECT name, kontostand_giro FROM kunde AS kunde_mit_kontostand_groesser_2000 WHERE kontostand_giro > 2000 GROUP BY name;
-- E
SELECT name, kredit FROM kunde WHERE kredit < 0;
-- F
SELECT kunde.name, kredit, ort.name FROM kunde, ort WHERE ort_postleitzahl = postleitzahl AND kredit < 0;
-- G1 - geht auch mit LEFT JOIN
SELECT kunde.name, kredit, ort.name FROM kunde RIGHT JOIN ort ON ort_postleitzahl = postleitzahl AND kredit < 0;
-- H
SELECT ort.name, COUNT(kunde.name) FROM kunde, ort WHERE ort_postleitzahl = postleitzahl AND anzahl_telefonleitungen > 100 GROUP BY ort.name;
-- K
SELECT COUNT(*) AS anzahl_kunden_in_orten_weniger_1mio FROM kunde, ort WHERE ort_postleitzahl = postleitzahl AND einwohnerzahl < 1000000 HAVING anzahl_kunden_in_orten_weniger_1mio > 3;


-- Aufgabe 07_2

-- A
SELECT ROUND(einwohnerzahl/anzahl_telefonleitungen,1) AS einwohner_pro_telefonleitung, name FROM ort ;

-- C
SELECT ort.name, ROUND(anzahl_telefonleitungen/einwohnerzahl,10) AS anzahl_telefonleitungen_pro_einwohner FROM ort ORDER BY anzahl_telefonleitungen_pro_einwohner DESC;

-- D
SELECT kunde.name, ROUND(kontostand_giro + kredit, 2) AS bilanz FROM kunde ORDER BY bilanz DESC;

-- E
SELECT kunde.name, ROUND(kontostand_giro + kredit, 2) AS bilanz FROM kunde HAVING bilanz < 5000 ORDER BY bilanz DESC;


-- Aufgabe 07_3

-- A
SELECT SUM(kontostand_giro) FROM kunde;

-- B
SELECT SUM(kontostand_giro) FROM kunde, ort WHERE ort_postleitzahl = postleitzahl AND ort.name = 'Emmendingen';

-- C1
SELECT ROUND(AVG(kontostand_giro),1) FROM kunde, ort WHERE ort_postleitzahl = postleitzahl AND ort.name = 'Freiburg';

-- D
SELECT MIN(kredit), MAX(kredit) FROM kunde WHERE kredit < 0;

-- E
SELECT MIN(kredit + kontostand_giro), MAX(kredit + kontostand_giro) FROM kunde;

-- F
SELECT ROUND(AVG(anzahl_telefonleitungen),0) AS 'Durchschnittliche Anzahl Telefonleitungen pro Ort' FROM ort;

-- G
SELECT ROUND(AVG(anzahl_telefonleitungen),0) AS 'Durchschnittliche Anzahl Telefonleitungen pro Ort' FROM ort WHERE einwohnerzahl > 1000000;

-- H
SELECT group_concat(DISTINCT ort.name), SUM(einwohnerzahl) FROM ort, kunde WHERE ort_postleitzahl = postleitzahl;