SQL-Beispielvariation: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 16: | Zeile 16: | ||
==Umsätze je Auftrag== | ==Umsätze je Auftrag== | ||
<pre>SELECT Kunde.Nr AS ' | Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Auftragsnummer und Umsatz, sortiert nach Kundennummer und Auftrag. | ||
<pre>SELECT Kunde.Nr AS 'Kundennummer', Kunde.Nachname, Auftrag.Nr AS 'Auftragsnummer', SUM(Auftragspos.Menge*Buch.Preis) AS 'Umsatz/Auftrag' | |||
FROM Kunde, Auftrag, Auftragspos, Buch | FROM Kunde, Auftrag, Auftragspos, Buch | ||
WHERE Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr | WHERE Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr | ||
Zeile 36: | Zeile 38: | ||
==Umsätze je Kunde== | ==Umsätze je Kunde== | ||
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Ort und Umsatz, absteigend sortiert nach dem Umsatz. | |||
<pre>SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz | <pre>SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz | ||
Zeile 58: | Zeile 62: | ||
==Eingrenzung der Umsätze je Kunde auf Werte >= 100.000== | ==Eingrenzung der Umsätze je Kunde auf Werte >= 100.000== | ||
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Ort und Umsatz, absteigend sortiert nach dem Umsatz. | |||
<pre>SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz | <pre>SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz | ||
Zeile 85: | Zeile 91: | ||
==Umsätze je Region== | ==Umsätze je Region== | ||
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Region und Umsatz, absteigend sortiert nach dem Umsatz. | |||
<pre>SELECT PLZ.Region, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Regionsumsatz | <pre>SELECT PLZ.Region, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Regionsumsatz |
Version vom 14. Dezember 2011, 18:56 Uhr
Die Lerneinheit "SQL-Beispielvariation" dient der aufbauenden Erläuterung der Aggregation mittels GROUP BY Klausel. Die Anwendungsbeispiele sind als aktive Abfragen auf der Trainingsdatenbank SQL:IDV:EDU installiert. |
Unterschiedliche Aggregationsstufen
Nachfolgende Beispiele liefern Ergebnisse mit unterschiedlichen Verdichtungsstufen (Aggregationsstufen) der Kennzahl Umsatz, beginnend mit der Auflistung der Umsätze je Auftrag, fortgesetzt mit den Umsätzen je Kunde und abschließend mit den Umsätzen je Region.
Aus der Logik der Aggregierung ist abzuleiten, dass den Ergebnissen unterschiedliche Merkmale (Felder) beizufügen sind. In der Regel macht es keinen Sinn, Merkmale einer niedrigeren Aggregationsstufe als für die Verdichtung gewählt, in die Merkmalsliste aufzunehmen. So liefert z. B. das Merkmal "Auftragsnummer" in der Ermittlung des Umsätze je Kunde wenig Information, da Kundenumsätze in der Regel aus der Summe mehrerer Aufträge gebildet werden.
Die Zahl der Treffer verringert sich, je höher die Aggregationsstufe.
Umsätze je Auftrag
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Auftragsnummer und Umsatz, sortiert nach Kundennummer und Auftrag.
SELECT Kunde.Nr AS 'Kundennummer', Kunde.Nachname, Auftrag.Nr AS 'Auftragsnummer', SUM(Auftragspos.Menge*Buch.Preis) AS 'Umsatz/Auftrag' FROM Kunde, Auftrag, Auftragspos, Buch WHERE Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY Auftrag.Nr, Kunde.Nr, Kunde.Nachname ORDER BY 2,3
<html> <form method="post" action="http://sql.idv.edu/thema/work/sql.php" target="_blank"> <input type="hidden" name="select" value="SELECT Kunde.Nr AS 'Kundennr.', Kunde.Nachname, Auftrag.Nr AS 'Auftragsnr.', SUM(Auftragspos.Menge*Buch.Preis) AS 'Umsatz/Auftrag' FROM Kunde, Auftrag, Auftragspos, Buch WHERE Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY Auftrag.Nr, Kunde.Nr, Kunde.Nachname ORDER BY 2,3"> <input type="submit" value="Ausführen"> </form> </html>
Umsätze je Kunde
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Ort und Umsatz, absteigend sortiert nach dem Umsatz.
SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz FROM PLZ, Kunde, Auftrag, Auftragspos, Buch WHERE PLZ.Plz=Kunde.Plz AND Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort ORDER BY Kunde.Nr
<html> <form method="post" action="http://sql.idv.edu/thema/work/sql.php" target="_blank"> <input type="hidden" name="select" value="SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz FROM PLZ, Kunde, Auftrag, Auftragspos, Buch WHERE PLZ.Plz=Kunde.Plz AND Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort ORDER BY Kunde.Nr"> <input type="submit" value="Ausführen"> </form> </html>
Eingrenzung der Umsätze je Kunde auf Werte >= 100.000
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Ort und Umsatz, absteigend sortiert nach dem Umsatz.
SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz FROM PLZ, Kunde, Auftrag, Auftragspos, Buch WHERE PLZ.Plz=Kunde.Plz AND Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort HAVING Umsatz >= 100000 ORDER BY 4 DESC
<html> <form method="post" action="http://sql.idv.edu/thema/work/sql.php" target="_blank"> <input type="hidden" name="select" value="SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz FROM PLZ, Kunde, Auftrag, Auftragspos, Buch WHERE PLZ.Plz=Kunde.Plz AND Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort HAVING Umsatz >= 100000 ORDER BY 4 DESC"> <input type="submit" value="Ausführen"> </form> </html>
Umsätze je Region
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Region und Umsatz, absteigend sortiert nach dem Umsatz.
SELECT PLZ.Region, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Regionsumsatz FROM PLZ, Kunde, Auftrag, Auftragspos, Buch WHERE PLZ.Plz=Kunde.Plz AND Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY PLZ.Region ORDER BY 2 DESC
<html> <form method="post" action="http://sql.idv.edu/thema/work/sql.php" target="_blank"> <input type="hidden" name="select" value="SELECT PLZ.Region, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Regionsumsatz FROM PLZ, Kunde, Auftrag, Auftragspos, Buch WHERE PLZ.Plz=Kunde.Plz AND Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY PLZ.Region ORDER BY 2 DESC"> <input type="submit" value="Ausführen"> </form> </html>