Mark Aber V.I.P. Beitrag melden Geschrieben 9. Dezember 2012 (bearbeitet) Hallo Leute ! Erstmals der Link: http://sql.idv.edu/ -> Interaktive Abfrage Wie fass ich in dieser Datenbank die Gesamtumsätze der Kunden zusammen. Ich habs bis jetzt soweit: Select Auftrag.Kundennummer, Kunde.Vorname, Kunde.Nachname, PLZ.Ort, PLZ.Region, SUM(Auftragspos.Menge*Buch.Preis) AS Umsatz From PLZ,Kunde, Auftrag, Auftragspos, Buch Where Auftrag.Kundennummer=Kunde.Nr and Auftrag.Nr=Auftragspos.Auftragsnummer and Auftragspos.Buchnummer= Buch.Nr and Kunde.Plz=PLZ.Plz Group by Kundennummer, Vorname, Nachname, Ort, Region, Auftragspos.Menge*Buch.Preis Order by Kundennummer, Auftragspos.Menge*Buch.Preis DESC, Nachname ASC da seh ich leider jeden wirklich jeden Einzelumsatz. Irgendwas fehlt noch und ich weiß nicht was . bearbeitet 9. Dezember 2012 von Mark Aber 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Silva My rule is never to look at anything on the Internet. Beitrag melden Geschrieben 9. Dezember 2012 (bearbeitet) Du hast es ja eh richtig, darfst aber nicht auch noch den Umsatz bei der Gruppierung dabei haben. Außerdem wäre es besser statt den ganzen WHERE-Bedingungen gleich mittels JOIN die Tabellen zu verbinden. Immerhin hast sonst das kartesische Produkt von allen Tabellen auf du die erst den Filter legst. SELECT Auftrag.Kundennummer, Kunde.Vorname, Kunde.Nachname, PLZ.Ort, PLZ.Region, SUM(Auftragspos.Menge*Buch.Preis) AS Umsatz FROM PLZ INNER JOIN Kunde ON Kunde.Plz=PLZ.Plz INNER JOIN Auftrag ON Auftrag.Kundennummer=Kunde.Nr INNER JOIN Auftragspos ON Auftrag.Nr=Auftragspos.Auftragsnummer INNER JOIN Buch ON Auftragspos.Buchnummer=Buch.Nr GROUP BY Auftrag.Kundennummer, Kunde.Vorname, Kunde.Nachname, PLZ.Ort, PLZ.Region ORDER BY Auftrag.Kundennummer, Auftragspos.Menge*Buch.Preis DESC, Nachname ASC bearbeitet 9. Dezember 2012 von Silva 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 9. Dezember 2012 War der Silva flotter. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Mark Aber V.I.P. Beitrag melden Geschrieben 9. Dezember 2012 Danke Silva. Hab ja gewusst, dass aufs ASB Verlass ist. Retter in jeder Lebenslage. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
churchill Im ASB-Olymp Beitrag melden Geschrieben 9. Dezember 2012 mah wollte auch helfen 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Mark Aber V.I.P. Beitrag melden Geschrieben 10. Dezember 2012 (bearbeitet) Hab schon wieder ein Problem. Folgende Aufgabenstellung. Ich soll alle Autoren ausgeben die im Jahr 2000 einen größeren Gesatmumsatz als 45000 machen. Das schräge ist wenn ich bei der Bedingung Buch.Preis*Auftragspos.Menge> 4500 eingib gibt er es mir ohne Probleme aus, wenn ich aber >45000 eingebe, bekomm ich nur eine leere Tabelle. Irgendwas stimmt da grundsätzlich nicht, die Umsatzerte ändern sich wenn ich was anderes eingebe. Hilfe. select Buch.Autor, SUM(Buch.Preis*Auftragspos.Menge) as Gesamtumsatz From Buch, Auftragspos, Auftrag Where Buch.Nr=Auftragspos.Buchnummer and Auftrag.Nr=Auftragspos.Auftragsnummer and Auftrag.Datum between "2000-01-01" and "2000-12-31" and Buch.Preis*Auftragspos.Menge>45000 Group by Buch.Autor Order by SUM(Buch.Preis*Auftragspos.Menge) desc bearbeitet 10. Dezember 2012 von Mark Aber 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 10. Dezember 2012 Hmm, mal auf die Schnelle hast du ein WHERE "Buch.Nr=Auftragspos.Menge" ... da kann schonmal was ned stimmen. Muss leider grad los, aber ich würde auch die Vorschläge vom Herrn Silva (Joins!) beherzigen. Falls es bis dahin noch keiner erledigt hab, werd ichs mir am Abend im Detail anschauen. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Mark Aber V.I.P. Beitrag melden Geschrieben 10. Dezember 2012 Hmm, mal auf die Schnelle hast du ein WHERE "Buch.Nr=Auftragspos.Menge" ... da kann schonmal was ned stimmen. Muss leider grad los, aber ich würde auch die Vorschläge vom Herrn Silva (Joins!) beherzigen. Falls es bis dahin noch keiner erledigt hab, werd ichs mir am Abend im Detail anschauen. stimmt, habs gerade ausgebessert ändert sich leider nix. @Joins: wir habens so "gelehrt" bekommen und sollens so anwenden. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
m4nt1c0r3 Banklwärmer Beitrag melden Geschrieben 10. Dezember 2012 select Buch.Autor, SUM(Buch.Preis*Auftragspos.Menge) as Gesamtumsatz From Buch, Auftragspos, Auftrag Where Buch.Nr=Auftragspos.Buchnummer and Auftrag.Nr=Auftragspos.Auftragsnummer and Auftrag.Datum between "2000-01-01" and "2000-12-31" Group by Buch.Autor having (SUM(Buch.Preis*Auftragspos.Menge) > 45000) Order by SUM(Buch.Preis*Auftragspos.Menge) desc sollte so stimmen 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Mark Aber V.I.P. Beitrag melden Geschrieben 10. Dezember 2012 danke 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
FAK-masteR AAAAlte Zeiten Beitrag melden Geschrieben 10. Dezember 2012 @Joins: wir habens so "gelehrt" bekommen und sollens so anwenden. ziemlich komisch. wo bzw. wer? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Mark Aber V.I.P. Beitrag melden Geschrieben 10. Dezember 2012 ziemlich komisch. wo bzw. wer? Informationsverarbeitung 1@JKU 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
axeman rockstar Beitrag melden Geschrieben 10. Dezember 2012 @Joins: wir habens so "gelehrt" bekommen und sollens so anwenden. das passt - abhängig vom DBMS - schon so. ist zwar nicht ANSI-konform, aber doch ein impliziter join. oracle und co. sind so gscheit, dass da mit hash joins/nested loops gearbeitet wird bzw. kartesianer nur dann eingesetzt werden, wenn es sinn macht. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Silva My rule is never to look at anything on the Internet. Beitrag melden Geschrieben 10. Dezember 2012 (bearbeitet) das passt - abhängig vom DBMS - schon so. ist zwar nicht ANSI-konform, aber doch ein impliziter join. oracle und co. sind so gscheit, dass da mit hash joins/nested loops gearbeitet wird bzw. kartesianer nur dann eingesetzt werden, wenn es sinn macht. Stimmt schon, aber warum auf die Datenbank und ihre Optimierungen verlassen, wenn es (einfache) Konstrukte gibt, die das auch für den User deutlich machen, dass da eine Tabelle mit der anderen auf der Spalte verbunden werden? Edit: Mir persönlich sind die JOINS lieber, auch wenn es vielleicht keine Vorteile hat, weil die meisten DBMS eh schon so viel rundherum optimieren, so gibt es ja auch keine Nachteile. Zumindest hätt ich bislang nix davon gehört. bearbeitet 10. Dezember 2012 von Silva 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
axeman rockstar Beitrag melden Geschrieben 11. Dezember 2012 Stimmt schon, aber warum auf die Datenbank und ihre Optimierungen verlassen, wenn es (einfache) Konstrukte gibt, die das auch für den User deutlich machen, dass da eine Tabelle mit der anderen auf der Spalte verbunden werden? Edit: Mir persönlich sind die JOINS lieber, auch wenn es vielleicht keine Vorteile hat, weil die meisten DBMS eh schon so viel rundherum optimieren, so gibt es ja auch keine Nachteile. Zumindest hätt ich bislang nix davon gehört. richtig - vor-/nachteile bzgl. verhalten des optimizers hat keine der beiden varianten, das ist wirklich geschmackssache. im gegensatz zu dir finde ich z.b. die implizite variante um einiges übersichtlicher 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.