Lösungen: Gruppierung mit Aggregatfunktionen
Completion requirements
- /* Aufg. 1: Lassen Sie sich aus der Tabelle Titel der Datenbank Verleger die Anzahl aller */
- /* Buchtitel und den Durchschnittspreis der Bücher anzeigen. [1] */
- USE UebVerleger;
- SELECT count(Titel) AS Buchtitelsumme, avg(Preis) AS DurchPreis FROM Titel;
- /* Aufg. 2: Lassen Sie sich aus der Tabelle Titel der Datenbank Verleger in Gruppierung */
- /* nach Gebiet (Fachgebiet) den Durchschnittspreis, Maximalpreis, Minimalpreis und die */
- /* Anzahl der jeweils davon betroffenen Buchtitel ausgeben. [6] */
- SELECT Gebiet, avg(Preis) AS DPreis, max(Preis) AS MaxPreis, min(Preis) AS
- MinPreis, count(Titel) AS AnzahlTitel FROM Titel GROUP BY Gebiet;
- /* Aufg. 3: Lassen Sie sich bezüglich der vorangegangenen Aufgabe nur die Gruppenwerte */
- /* anzeigen bei denen der Buchdurchschnittspreis höher als $13.50 ist. [4] */
- SELECT Gebiet, avg(Preis) AS DPreis, max(Preis) AS MaxPreis, min(Preis) AS
- MinPreis, count(Titel) AS AnzahlTitel FROM Titel
- GROUP BY Gebiet
- HAVING avg(Preis) > 13.5;
- /* Aufg. 4: Lassen Sie sich aus der Datenbank Bibliothek alle Mitglieder ausgeben, die */
- /* sich Bücher haben reservieren lassen und die jeweilige Anzahl der reservierten Bücher! */
- /* (Anm.: Die Mitglieder sollen nur mit ihrer Mitgliedsnummer angezeigt werden.) [28] */
- USE UebBibliothek;
- SELECT Mitglieds_Nr, count(isbn) FROM Reservierung
- GROUP BY Mitglieds_Nr
- /* Aufg. 5: Erweitern Sie die Ergebnisanzeige zur Aufg. 4 so, dass am Ende der Tabelle die */
- /* durchschnittliche Anzahl der reservierten Büchern je Mitglied angezeigt wird */
- /* [Ergebniswert: 3.66 ...] */
- /* Mitglieds_Nr (Kein Spaltenname) */
- /* 4642 4.0 */
- /* 8688 3.0 */
- /* 3418 4.0 */
- /* 3809 4.0 */
- /* 5832 3.0 */
- /* 171 3.0 */
- /* avg */
- /* 3.66723259762309 */
- /* Hilfe: DatenTypen konvertieren mit "convert" und "compute"-Klausel. siehe Hilfe */
- /* Bis MS SQL-Server 2008: */
- /* SELECT Mitglieds_Nr, Convert(float,COUNT(Mitglieds_Nr)) FROM reservierung */
- /* GROUP BY Mitglieds_Nr */
- /* compute AVG(Convert(float,COUNT(Mitglieds_Nr))) */
- /* Danach wurde compute nicht mehr unterstützt. Die Formulierung einer neuen SQL-Anweisung
- ist vorteilhafter (von Stefan Wirtz): */
- Select Mitglieds_Nr, count(ISBN) Reservierungen
- from Reservierung
- group by Mitglieds_Nr
- Union
- Select Null, avg(SubSelect.ISBNc)
- from
- (
- Select Mitglieds_Nr, cast(count(ISBN) as decimal) ISBNc
- from Reservierung
- group by Mitglieds_Nr
- )SubSelect
- /* Aufg. 6: Lassen Sie sich aus der Datenbank Bibliothek nur die Mitglieder ausgeben, die */
- /* sich mehr als 3 Bücher haben reservieren lassen und die jeweilige Anzahl der */
- /* reservierten Bücher! [393] */
- SELECT Mitglieds_Nr, count(isbn) FROM Reservierung
- GROUP BY Mitglieds_Nr
- HAVING count(isbn) > 3
- /* Aufg. 7: Lassen Sie sich aus der Datenbank Bibliothek die Mitgliederanzahl der */
- /* erwachsenen Mitglieder in den verschiedenen WohnOrten anzeigen. [11] */
- SELECT Ort, count(Mitglieds_Nr) AS anzMitglieder
- FROM Erwachsene
- GROUP BY Ort
- /* Aufg. 8: Lassen Sie sich aus der Datenbank Verleger alle Orte auflisten in denen */
- /* Autoren wohnen und die Anzahl der dort lebenden Autoren. [16] */
- USE UebVerleger;
- SELECT Ort, count(A_id) AS anzAutoren FROM Autoren
- GROUP BY Ort HAVING count(A_id) > 0;
Last modified: Wednesday, 24 April 2024, 9:16 AM