Informationsverarbeitung 2 |
Sonntag, 6. April 2008
Aufgabe 3 - SQL
Thomas.Haselberger.Uni-Linz, 23:02h
Ausgehend von folgender Abfrage sollten wir weitere Auswertungen vornehmen:
SELECT Kunde.Nr, Kunde.Nachname, COUNT(Auftrag.Nr) FROM Kunde, Auftrag WHERE Kunde.Nr = Auftrag.Kundennummer GROUP BY Kunde.Nr ORDER BY Kunde.Nr Im ersten Schritt soll eine Erweiterung um den Kundenumsatz erfolgen. Das habe ich wie folgt gemacht: SELECT Kunde.Nr, Kunde.Nachname, COUNT(Auftrag.Nr), SUM(Buch.Preis*Auftragspos.Menge) AS Kundenumsatz FROM Kunde, Auftrag, Auftragspos, Buch WHERE Kunde.Nr = Auftrag.Kundennummer AND Auftrag.Nr = Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer = Buch.Nr GROUP BY Kunde.Nr ORDER BY Kunde.Nr Hierbei ist mir aufgefallen, dass die Anzahl der Kundenumsätze ansteigt. Trotz langen Überlegungen und Ausprobierens bin ich aber nicht auf den Grund für dieses Problem gestoßen bzw. darauf, wie die Abfrage zu formulieren ist, damit dieselbe Auftragsanzahl herauskommt wie bei der ersten Abfrage. Anm.: Meines Erachtens ist aber die Anzahl der ersten Abfrage jedenfalls korrekt, denn das habe ich durch folgende Überprüfungsabfrage kontrolliert: SELECT Kunde.Nr, Kunde.Nachname, Auftrag.Datum FROM Kunde, Auftrag WHERE Kunde.Nr = Auftrag.Kundennummer AND Kunde.Nr = 1 Diese einfache Abfrage zeigt mir alle Aufträge des Kunden mit der Nummer 1 an. Dasselbe habe ich auch noch mit dem Kunden Nummer 2 gemacht und beide Male stimmt die Anzahl der Aufträge mit jener überein, die die erste Abfrage liefert. Damit ist klar, dass der Fehler jedenfalls durch das Hinzufügen des Kundenumsatzes entsteht. Ich denke, dass ich auch das Problem erkannt habe: es werden hier die einzelnen Auftragspositionen(!) gezählt. Darauf bin ich gekommen als ich mir sämtliche Auftragspositionen der Aufträge des Kunden mit der Nummer 1 durch folgende Abfrage angesehen habe: SELECT Kunde.Nr, Kunde.Nachname, Auftrag.Nr, Auftrag.Datum, Buch.Preis, Auftragspos.Menge, Buch.Preis*Auftragspos.Menge AS Kundenumsatz FROM Kunde, Auftrag, Auftragspos, Buch WHERE Kunde.Nr = Auftrag.Kundennummer AND Auftrag.Nr = Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer = Buch.Nr And Kunde.Nr = 1 Die von mir selbst am Bildschirm abzählte Anzahl der Auftragspositionen entspricht dem „Count-Wert“ der zweiten (falschen) Abfrage. Ich habe dann von einer Kollegin erfahren, wie dieser Fehler zu beheben ist. Man braucht ein "Distinct" in der Count-Klausel. Die richtige Abfrage sieht dann wie folgt aus: SELECT Kunde.Nr, Kunde.Nachname, COUNT(Distinct Auftrag.Nr), SUM(Buch.Preis*Auftragspos.Menge) AS Kundenumsatz FROM Kunde, Auftrag, Auftragspos, Buch WHERE Kunde.Nr = Auftrag.Kundennummer AND Auftrag.Nr = Auftragspos.Auftragsnummer AND Auftragspos.Buchnummer = Buch.Nr GROUP BY Kunde.Nr ORDER BY Kunde.Nr Hier wird dasselbe Ergebnis wie bei der ursprünglichen Abfrage (Ausgangssituation) geliefert. Bei der zweiten Teilaufgabe weiß ich leider nicht genau was hier gemeint ist (aber möglicherweise ist dieser Punkt auch durch die 3. Teilaufgabe abgedeckt) Die 3. Aufgabe scheint dann auch ein richtiges Ergebnis zu bringen. Die Abgrenzung in Zeitabschnitte habe ich für Aufträge für das Jahr 2001 wie folgt durchgeführt: SELECT Kunde.Nr, Kunde.Nachname, COUNT(Auftrag.Nr) FROM Kunde, Auftrag WHERE Kunde.Nr = Auftrag.Kundennummer AND Auftrag.Datum between '2001-01-01' and '2001-12-31' GROUP BY Kunde.Nr ORDER BY Kunde.Nr Ich habe anschließend auch für die Kunden 1, 55, 96 und 133 folgendermaßen überprüft, ob tatsächlich keine Aufträge (bei Kunde Nr. 1) bzw. ein Auftrag (bei den Kunden Nr. 55, 96, 133) aus dem Jahr 2001 vorliegt: SELECT Kunde.Nr, Kunde.Nachname, Auftrag.Datum FROM Kunde, Auftrag WHERE Kunde.Nr = Auftrag.Kundennummer AND Kunde.Nr = 55 Bei der vierten Teilaufgabe gehe ich davon aus dass man die AVG-Funktion verwenden muss. Allerdings muss ich gleichzeitig auch gestehen, dass ich nicht weiß was hier zu machen ist. ... comment |
Online for 6109 days
Last update: 2008.06.17, 16:09 status
You're not logged in ... login
menu
search
calendar
recent updates
Beispielklausur
1. Regionen wo überdurchschnittliche Gesamtumsätze Select... by Thomas.Haselberger.Uni-Linz (2008.06.17, 16:09) Aufgabe 5 und 6 - Geschäftsmodell-Redesign
Geschäftsmodell – Redesign 1. Aufgabe des... by Thomas.Haselberger.Uni-Linz (2008.06.11, 11:42) Tutorium, 29.4.2008,...
Buchtitel: by Thomas.Haselberger.Uni-Linz (2008.04.29, 12:54) Tutorium, 29.4.2008
1. Beispiel: Auftragssuche nach Kundennummern 2 by Thomas.Haselberger.Uni-Linz (2008.04.29, 12:37) Aufgabe 4 - XML
Da meine Matrikelnummer 0555410 ist, habe ich folgende... by Thomas.Haselberger.Uni-Linz (2008.04.23, 14:53) |