SQL-Beispielvariation: Unterschied zwischen den Versionen

Aus IV1
Hans4mido (Diskussion | Beiträge)
K Textersetzung - „http://sql.idv.edu“ durch „https://sql.idb.edu“
 
(35 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<!--<yambe:breadcrumb>SQL|SQL</yambe:breadcrumb>-->
<div class='noprint'><yambe:breadcrumb>SQL|SQL</yambe:breadcrumb></div>
{{Kurzform|Die Lerneinheit "SQL-Beispielvariation" dient der aufbauenden Erläuterung der Aggregation mittel GROUP BY Klausel. Die Anwendungsbeispiele sind als aktive Abfragen auf einer Trainingsdatenbank installiert.}}
{{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'''. 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.
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 wird.
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 Zahl der Treffer verringert sich, je höher die Aggregationsstufe, die Werte hingegen steigen.
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/Auftrag'
<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="http://sql.idv.edu/thema/work/sql.php" target="_blank">
<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/Auftrag'
<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==


==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="http://sql.idv.edu/thema/work/sql.php" target="_blank">
<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==


==Umsätze je Region==
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.Region, ROUND(SUM(Auftragspos.Menge*Buch.Preis),2) AS Regionsumsatz
<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.Region
AND Kunde.Nr=Auftrag.Kundennummer
ORDER BY 2 DESC</pre>
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="http://sql.idv.edu/thema/work/sql.php" target="_blank">
<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 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.Region
GROUP BY Kunde.Nr, Kunde.Nachname, PLZ.Ort
ORDER BY 2 DESC">
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==


==Eingrenzung der Umsätze je Region auf Werte >= 100.000==
Erwünscht ist eine Ergebnisliste mit den Merkmalen: Region 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 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
WHERE PLZ.Plz=Kunde.Plz
Zeile 87: Zeile 103:
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftragspos.Buchnummer=Buch.Nr
AND Auftragspos.Buchnummer=Buch.Nr
GROUP BYKunde.Nr, Kunde.Nachname, PLZ.Ort
GROUP BY PLZ.Region
HAVING Umsatz >= 100000
ORDER BY 2 DESC</pre>
ORDER BY 4 DESC</pre>
<!--
 
 
<html>
<html>
<form method="post" action="http://sql.idv.edu/thema/work/sql.php" target="_blank">
<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 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
WHERE PLZ.Plz=Kunde.Plz
Zeile 100: Zeile 114:
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftragspos.Buchnummer=Buch.Nr
AND Auftragspos.Buchnummer=Buch.Nr
GROUP BYKunde.Nr, Kunde.Nachname, PLZ.Ort
GROUP BY PLZ.Region
HAVING Umsatz >= 100000
ORDER BY 2 DESC">
ORDER BY 4 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

<yambe:breadcrumb>SQL|SQL</yambe:breadcrumb>
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)