Melde dich an, um diesem Inhalt zu folgen  
Folgen diesem Inhalt 0
Mark Aber

SQL Abfrage

21 Beiträge in diesem Thema

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 von Mark Aber

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von Silva

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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. :ratlos: 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 von Mark Aber

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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. :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

@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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von Silva

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 ;)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!


Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.


Jetzt anmelden
Melde dich an, um diesem Inhalt zu folgen  
Folgen diesem Inhalt 0

  • Folge uns auf Facebook

  • Partnerlinks

  • Unsere Sponsoren und Partnerseiten

  • Wer ist Online

    Keine registrierten Benutzer online.