Zum Inhalt springen

Wie muss die Abfrage aussehen?


Hackschnitzel

Empfohlene Beiträge

Hallo Leute,

ich hab zwei Fragestellungen auf eine Tabelle, komme aber irgendwie auf kein Ergebniss. Ich hoffe von euch kann mir jemand helfen.

Ich hab folgende Tabelle:

Bestellnummer Artikel Preis

0001 Cola 10

0001 Bier 10

0001 Sprudel 20

0002 Bier 20

0002 Cola 10

0003 Limo 15

0003 Sprudel 10

0003 Cola 20

... ... ...

Tabelle ist natürlich superlang!

Meine erste Fragestellung wäre: Wieviel Bestellungen mit 3 Artikel gibt es?

Meine zweite Fragestellung wäre: Wie ist der Durchschnittspreis aller Bestellungen mit Bier und wie der Durchschnittspreis aller Bestellungen ohne Bier?

Ich hoffe ihr wisst wie ich es meine.

Schonmal Danke im Vorraus.

Gruss

Hackschnitzel

Link zu diesem Kommentar
Auf anderen Seiten teilen

//Tabelle test (t_bstNr INT, t_article VARCHAR, t_preis FLOAT)

//Bestellungen mit 3 Artikeln

SELECT t_bstNr FROM test GROUP BY t_bstNr HAVING COUNT(t_bstNr) = 3;

//DS-Preis der Artikel aller Bestellungen mit Bier

SELECT t1.t_bstNr, (SUM(t1.t_preis) / COUNT(t1.t_bstNr)) fPreisDS FROM test AS t1 LEFT JOIN test AS t2 ON t2.t_bstNr=t1.t_bstNr AND t2.t_article='Bier' WHERE t2.t_bstNr IS NOT NULL GROUP BY t1.t_bstNr;

//DS-Preis der Artikel aller Bestellungen ohne Bier

SELECT t1.t_bstNr, (SUM(t1.t_preis) / COUNT(t1.t_bstNr)) AS fPreisDS FROM test AS t1 LEFT JOIN test AS t2 ON t2.t_bstNr=t1.t_bstNr AND t2.t_article='Bier' WHERE t2.t_bstNr IS NULL GROUP BY t1.t_bstNr;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das erste hat wunderbar funktioniert.

Das zweite zwar auch, aber ich brauch es ein bissl anders.

Wenn ich nochmal auf das Beispiel gehe, dass ich oben geschrieben hab. Nehmen wir an, es gab nur diese drei Bestellungen. Dann möcht ich das folgendermaßen:

Mit Bier:

Hier hab ich Bestellung 0001. Also mach ich 10 + 10 + 20 = 40

Dann hab ich Bestellung 0002. Also mach ich 20 + 10 = 30.

Jetzt nehm ich die 30 (Preis 0001) + 40 (Preis 0002) / 2 (Anzahl Bestellungen)

Mein Durchschnittspreis aller Bestellungen mit Bier ist 35 €.

Ohne Bier:

Hier hab ich Bestellung 0003. Also mach ich 15 + 10 + 20 = 45

Jetzt nehm ich die 45 (Preis 0003) / 1 (Anzahl Bestellungen)

Mein Durchschnittspreis aller Bestellungen ohne Bier ist 45 €.

Es ist bestimmt eine super einfache Abfrage, aber ich komme einfach nicht drauf.

Gruss

hackschnitzel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist bestimmt eine super einfache Abfrage, aber ich komme einfach nicht drauf.

select avg(preis) from (select sum(preis) preis from bestellungen where bestellid in (select bestellid from bestellungen where artikel='bier') group by bestellid);

die zweite sieht genauso aus, nur statt 'not in' statt 'in'.

-j

Link zu diesem Kommentar
Auf anderen Seiten teilen

Geht auch irgendwie nicht. Am besten geklappt hat die Abfrage von Monty82, allerdings brauch ich nicht den Durchschnittspreis der einzelnen sondern allen zusammen.

Ich hätt noch ne Fragestellung. Wie muss die Abfrage aussehen, wenn ich wissen will welche Artikel kommen zweimal unter einer Bestellnummer vor ?

Zum Beispiel bei dieser Tabelle:

Bestellnummer Artikel Preis

0001 Cola 10

0001 Bier 10

0001 Sprudel 20

0002 Bier 20

0002 Cola 10

0003 Limo 15

0003 Sprudel 10

0003 Sprudel 20

...

Gruss

Hackschnitzel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zunächst hat er mir was gebracht, wie UDFCALLNAME zwischen ) und ;.

Dann hab ich dran rumgeschraubt. Und es kamen nur Fehlermeldungen.

Ich muss es nochmal versuchen, dann schreib ich genaueres.

Ich hab das gefühl, das er keine select anweisung im from Teil machen kann.

Ich dachte immer, das das gar nicht geht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wegen der Versionsnummer muss ich mal genauer nachschauen, da ich einen SQL Assistenten in einem anderen Programm nutze.

Ich hab das Problem aber jetzt gelöst. Ich habs folgendermaßen gemacht:

1. Summe aller Preise in den betreffenden Bestellungen:

select sum(preis) from bestellungen where bestellid in (select bestellid from bestellungen where artikel='bier') group by bestellid;

2. Anzahl Bestellungen, in denen Bier vorkommt:

select count(bestellnummer) from bestellungen where bestellid in (select bestellid from bestellungen where artikel='bier') group by bestellid;

3. Hab Summe durch Anzahl geteilt und hab nun mein Ergebnis. Umständlich, aber ging.

Dennoch danke für die Hilfe.

Jetzt hab ich nur noch ein Problem. Und zwar:

Wie muss die Abfrage aussehen, wenn ich wissen will wieviel Artikel kommen zweimal unter einer Bestellnummer vor ?

Oder Wieviel Bestellungen enthalten zweimal den gleichen Artikel?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...