SQL-Beispielvariation: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) K Textersetzung - „http://sql.idv.edu“ durch „https://sql.idb.edu“ |
|||
(36 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
< | <div class='noprint'><yambe:breadcrumb>SQL|SQL</yambe:breadcrumb></div> | ||
{{Kurzform|Die Lerneinheit "SQL-Beispielvariation" dient der | {{Kurzform|Die Lerneinheit "SQL-Beispielvariation" dient der vertiefenden Erläuterung der Aggregation mittels GROUP BY}} | ||
Zeile 8: | Zeile 8: | ||
Nachfolgende Beispiele liefern Ergebnisse mit '''unterschiedlichen Verdichtungsstufen (Aggregationsstufen) der Kennzahl Umsatz''' | 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 | Aus der Logik der Verdichtung 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 der Umsätze je Kunde wenig Information, da Kundenumsätze in der Regel aus der Summe mehrerer Aufträge gebildet werden. | ||
Die | Die Anzahl der Treffer verringert sich, je höher die Aggregationsstufe ist. Die ermittelten Werde dagegen steigen. | ||
==Umsätze je Auftrag== | ==Umsätze je Auftrag== | ||
<pre>SELECT Kunde.Nr AS 'Kundennr.', Kunde.Nachname, Auftrag.Nr AS 'Auftragsnr.', SUM(Auftragspos.Menge*Buch.Preis) AS 'Umsatz | <pre>SELECT Kunde.Nr AS 'Kundennr.', Kunde.Nachname, Auftrag.Nr AS 'Auftragsnr.', ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS 'Umsatz' | ||
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 | |||
GROUP BY Auftrag.Nr, Kunde.Nr, Kunde.Nachname | GROUP BY Auftrag.Nr, Kunde.Nr, Kunde.Nachname | ||
ORDER BY 2,3</pre> | ORDER BY 2,3</pre> | ||
<!-- | |||
<html> | <html> | ||
<form method="post" action=" | <form method="post" action="https://sql.idb.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 | <input type="hidden" name="select" value="SELECT Kunde.Nr AS 'Kundennr.', Kunde.Nachname, Auftrag.Nr AS 'Auftragsnr.', ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS 'Umsatz' | ||
FROM Kunde, Auftrag, Auftragspos, Buch | FROM Kunde, Auftrag, Auftragspos, Buch | ||
WHERE Kunde.Nr=Auftrag.Kundennummer | WHERE Kunde.Nr=Auftrag.Kundennummer | ||
Zeile 34: | Zeile 36: | ||
</form> | </form> | ||
</html> | </html> | ||
--> | |||
==Umsätze je Kunde== | |||
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Ort und Umsatz, absteigend sortiert nach dem Umsatz, welcher auf zwei Nachkommastellen gerundet ist. | |||
<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 | ||
FROM PLZ, Kunde, Auftrag, Auftragspos, Buch | 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 | 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 | GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort | ||
ORDER BY Kunde.Nr</pre> | ORDER BY Kunde.Nr</pre> | ||
<!-- | |||
<html> | <html> | ||
<form method="post" action=" | <form method="post" action="https://sql.idb.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 | <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 | FROM PLZ, Kunde, Auftrag, Auftragspos, Buch | ||
Zeile 56: | Zeile 63: | ||
</form> | </form> | ||
</html> | </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, welcher auf zwei Nachkommastellen gerundet ist. | |||
<pre>SELECT PLZ. | <pre>SELECT Kunde.Nr, Kunde.Nachname, PLZ.Ort, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Umsatz | ||
FROM PLZ, Kunde, Auftrag, Auftragspos, Buch | 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 | WHERE PLZ.Plz=Kunde.Plz | ||
GROUP BY PLZ. | AND Kunde.Nr=Auftrag.Kundennummer | ||
ORDER BY | AND Auftrag.Nr=Auftragspos.Auftragsnummer | ||
AND Auftragspos.Buchnummer=Buch.Nr | |||
GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort | |||
HAVING SUM(Auftragspos.Menge*Buch.Preis) >= 100000 | |||
ORDER BY 4 DESC</pre> | |||
<!-- | |||
<html> | <html> | ||
<form method="post" action=" | <form method="post" action="https://sql.idb.edu/thema/work/sql.php" target="_blank"> | ||
<input type="hidden" name="select" value="SELECT PLZ. | <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 | FROM PLZ, Kunde, Auftrag, Auftragspos, Buch | ||
WHERE PLZ.Plz=Kunde.Plz | WHERE PLZ.Plz=Kunde.Plz | ||
Zeile 73: | Zeile 86: | ||
AND Auftrag.Nr=Auftragspos.Auftragsnummer | AND Auftrag.Nr=Auftragspos.Auftragsnummer | ||
AND Auftragspos.Buchnummer=Buch.Nr | AND Auftragspos.Buchnummer=Buch.Nr | ||
GROUP BY PLZ. | GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort | ||
ORDER BY | HAVING SUM(Auftragspos.Menge*Buch.Preis) >= 100000 | ||
ORDER BY 4 DESC"> | |||
<input type="submit" value="Ausführen"> | <input type="submit" value="Ausführen"> | ||
</form> | </form> | ||
</html> | </html> | ||
--> | |||
==Umsätze je Region== | |||
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Region und Umsatz, absteigend sortiert nach dem Umsatz, welcher auf zwei Nachkommastellen gerundet ist. | |||
<pre>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</pre> | |||
<!-- | |||
<html> | <html> | ||
<form method="post" action=" | <form method="post" action="https://sql.idb.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 | <input type="hidden" name="select" value="SELECT PLZ.Region, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Regionsumsatz | ||
FROM PLZ, Kunde, Auftrag, Auftragspos, Buch | 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 | WHERE PLZ.Plz=Kunde.Plz | ||
GROUP BY | AND Kunde.Nr=Auftrag.Kundennummer | ||
AND Auftrag.Nr=Auftragspos.Auftragsnummer | |||
AND Auftragspos.Buchnummer=Buch.Nr | |||
GROUP BY PLZ.Region | |||
ORDER BY 2 DESC"> | ORDER BY 2 DESC"> | ||
<input type="submit" value="Ausführen"> | <input type="submit" value="Ausführen"> | ||
</form> | </form> | ||
</html> | </html> | ||
--> | |||
== Zitiervorschlag == | |||
''Mittendorfer'' in ''Höller'', Informationsverarbeitung I, SQL-Abfragen (mussswiki.idb.edu/iv1) |
Aktuelle Version vom 1. Oktober 2018, 14:10 Uhr
Die Lerneinheit "SQL-Beispielvariation" dient der vertiefenden Erläuterung der Aggregation mittels GROUP BY |
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 Verdichtung 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 der Umsätze je Kunde wenig Information, da Kundenumsätze in der Regel aus der Summe mehrerer Aufträge gebildet werden.
Die Anzahl der Treffer verringert sich, je höher die Aggregationsstufe ist. Die ermittelten Werde dagegen steigen.
Umsätze je Auftrag
SELECT Kunde.Nr AS 'Kundennr.', Kunde.Nachname, Auftrag.Nr AS 'Auftragsnr.', ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS 'Umsatz' 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
Umsätze je Kunde
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Kundennummer, Nachname, Ort und Umsatz, absteigend sortiert nach dem Umsatz, welcher auf zwei Nachkommastellen gerundet ist.
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
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, welcher auf zwei Nachkommastellen gerundet ist.
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 SUM(Auftragspos.Menge*Buch.Preis) >= 100000 ORDER BY 4 DESC
Umsätze je Region
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Region und Umsatz, absteigend sortiert nach dem Umsatz, welcher auf zwei Nachkommastellen gerundet ist.
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
Zitiervorschlag
Mittendorfer in Höller, Informationsverarbeitung I, SQL-Abfragen (mussswiki.idb.edu/iv1)