Ausgewählte SQL-Abfragen
Wolfgang.Simetsberger.Uni-Linz | 31. Oktober 08
Für die Umstrukturierung des Buchhandelsgeschäfts hat der Geschäftsführer bereits eine Maßnahme getroffen und einen neuen Mitarbeiter, Hr. Schwarz, eingestellt. Hr. Schwarz war bis vor kurzem für ein namhaftes Buchhandelsgeschäft als Verkäufer und auch als Einkäufer tätig und besitzt somit über ein fundiertes Wissen in der Branche. Da er vor kurzem einen Einstiegskurs für SQL besucht hat, versucht er nun seine erlernten Kenntnisse anzuwenden.
Herr Schwarz möchte mit der folgenden Abfrage herausfinden, welche Verlage und somit Lieferanten in der Datenbank gelistet sind. SELECT DISTINCT Verlag.Name FROM Verlag |
Als nächstes möchte Hr. Schwarz wissen, auf welche Verlage der aktuelle Lagerbestandswert entfällt. SELECT Verlag.Name AS Verlagname, SUM(Buch.Bestand*Buch.Preis) AS "Bestandswert" FROM Verlag, Buch WHERE Verlag.Kurzbezeichnung=Buch.Verlag GROUP BY Verlag.Name ORDER BY Bestandswert DESC |
Herr Schwarz hat bei der vorherigen Abfrage festgestellt, dass die Oesterreichische BUNDESVERLAG Ges.m.b.H., Kurzbezeichnung "oev", einen sehr hohen Bestandswert am Lager ausweist und möchte deshalb wissen, welche Bücher des Verlages sich zu welchem Preis auf Lager befinden. SELECT Buch.Titel, Buch.Preis FROM Buch WHERE Buch.Verlag LIKE 'oev' ORDER BY Buch.Preis DESC |
Da Herr Schwarz schon einige Informationen über den Lieferantenstamm gewonnen hat, beschließt er nun den Kundenstamm zu analysieren. Zu Beginn stellt sich für ihn die Frage - "Mit welchen Kunden macht das Unternehmen den größten Umsatz?" SELECT Kunde.Nachname, Kunde.Vorname, Kunde.Nr, SUM(Buch.Preis*Auftragspos.Menge) AS Gesamtumsatz FROM Kunde, Auftrag, Auftragspos, Buch WHERE Kunde.Nr=Auftrag.Kundennummer AND Auftrag.Nr=Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer=Buch.Nr GROUP BY Kunde.Nr |
Herr Schwarz kommt seinem Ziel, einen kleinen Überblick über das Unternehmen zu bekommen, immer näher. Als nächstes ist er noch daran interessiert, wie sich der Gesamtumsatz auf die einzelnen Bundeländer verteilt und führt deshalb eine weitere Abfrage durch. SELECT PLZ.Region AS Bundesland, SUM(Auftragspos.Menge*Buch.Preis) AS Gesamtumsatz 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 Bundesland ORDER BY Gesamtumsatz DESC |
Herr Schwarz weiß aus eigener Erfahrung, dass es zeitsparender und auch kostengünstiger ist, Bestellungen bei einer kleinen Anzahl von Lieferanten abzuwickeln. Darum legt er einen Ausdruck der folgenden Abfrage der Geschäftsführung vor. Die Liste beinhaltet jene Verlage, von denen ein Bestandswert von unter 10000 Euro auf Lager liegt. Herr Schwarz möchte, wenn von der Geschäftsführung genehmigt, die betroffenen Verlage aus der Lieferantenliste streichen. SELECT Verlag.Name AS Verlagname, SUM(Buch.Bestand*Buch.Preis) AS 'Bestandswert' FROM Verlag, Buch WHERE Verlag.Kurzbezeichnung=Buch.Verlag GROUP BY Verlag.Name HAVING Bestandswert<10000 ORDER BY Bestandswert DESC |
Hans.Mittendorfer.Uni-Linz,
Freitag, 31. Oktober 2008, 16:46
nett und einfallsreich gemacht!
Aber wie erklären Sie sich die immensen Nachkommastellen bei den Umsätzen nach Bundesländern? Hinweis: Suchen Sie den Fehler nicht in Ihrer Abrage.
Aber wie erklären Sie sich die immensen Nachkommastellen bei den Umsätzen nach Bundesländern? Hinweis: Suchen Sie den Fehler nicht in Ihrer Abrage.
Wolfgang.Simetsberger.Uni-Linz,
Freitag, 31. Oktober 2008, 18:12
Rein theoretisch ist es nicht möglich ein Ergebnis mit 2 Nachkommastellen zu bekommen. Da ich den Fehler nicht gefunden habe, führe ich die vielen Nachkommastellen auf einen Fehler in der Datenbank zurück.
reinhard.joechtl.Uni-Linz,
Dienstag, 4. November 2008, 20:23
Für mich sieht das so aus, als würde die Summe über alle Bundesländer gerechnet und beim Teilen auf die einzelnen Bundesländer dann durch die Teilung auf 9 irgendwie eine Ungenauigkeit im Nachkommabereich auftritt. Der Fehler in Wien und Tirol deckt sich ja offensichtlich ab.
Kann es sein, dass man sich das so erklären kann?
Kann es sein, dass man sich das so erklären kann?
Hans.Mittendorfer.Uni-Linz,
Dienstag, 4. November 2008, 20:31
Es scheint sich tatsächlich um einen Rechen- bzw. Rundungsfehler zu handeln. Dieses Verhalten ist nicht neu und es ist auch nicht unsere Aufgabe ihn zu korrigieren, wichtig scheint jedoch, dass es Plausibilitätskontrollen gibt.
In meiner Schulausbildung wurden, in Anbetracht der damals noch spärlich - aber dennoch - vorhandenen Rechenmaschinen Schätzverfahren gelehrt, die vor dem Versagen der Maschinen schützen sollten. Dieses Grundprinzip gilt heute noch.
Mathematische Kuriositäten gibt es nicht nur im Bereich der Datenbanken, sondern auch bei Tabellenkalkulationswerkzeugen.
Quelle, aufgerufen am 4. Nov. 2008:
http://www.eastereggs.svensoltmann.de/content/view/649/26/
In meiner Schulausbildung wurden, in Anbetracht der damals noch spärlich - aber dennoch - vorhandenen Rechenmaschinen Schätzverfahren gelehrt, die vor dem Versagen der Maschinen schützen sollten. Dieses Grundprinzip gilt heute noch.
Mathematische Kuriositäten gibt es nicht nur im Bereich der Datenbanken, sondern auch bei Tabellenkalkulationswerkzeugen.
Quelle, aufgerufen am 4. Nov. 2008:
http://www.eastereggs.svensoltmann.de/content/view/649/26/