Forum Doku Wiki Blog

Forumsarchiv 2002, März
Wieder ein SQL Problem mit HAVING/WHERE

archivierte Beiträge lesen

  1. (DATENBANK) Wieder ein SQL Problem mit HAVING/WHERE von Andreas, 15. 03. 2002, 12:35

Wieder ein SQL Problem mit HAVING/WHERE

Der folgende Beitrag wurde am 15. 03. 2002, 12:35 Uhr von Andreas veröffentlicht.

Hallo!
Nochmal eine SQL-Frage: Ich habe folgende Abfrage:

SELECT SUM(Anzahl),bestellt
FROM p_bestelldaten
GROUP BY PID
HAVING bestellt = 0

Damit würde ich gerne für jedes Produkt(PID) die Anzahl ausgeben, die noch nicht bestellt ist. In einer einfachen Select - Abfrage, nur mit Where konnte ich schreiben, where bestellt = 0

Damit wurde alle Datensätze gefiltert, die noch keinen Wert im Datetime Feld "bestellt" hatten.

Die obige Abfrage schert sich aber einen Dreck darum, ob im Feld "bestellt" ein Datum steht oder nicht. Und wenn ich statt HAVING WHERE einsetze geht gar nichts mehr.

Jemand ne Idee?

Grüße
  Andreas

Wieder ein SQL Problem mit HAVING/WHERE

Der folgende Beitrag wurde am 15. 03. 2002, 12:48 Uhr von Daniela Koller veröffentlicht.

Hi Andreas

> SELECT SUM(Anzahl),bestellt
> FROM p_bestelldaten
> GROUP BY PID
> HAVING bestellt = 0

So geht das nicht, ich habs schon beim letzten Posting erklärt wieso.
Group By bezieht sich auf die Felder die du beim Select angibst,
und da steht keine PID, wenn du danach gruppieren willst, dann gib
sie auch oben an. Was nützt es dir nach etwas zu gruppieren wenn du gar
nicht weist, zu welcher Gruppe die Ausgabezeile gehört?

Eine strengeres Datenbankmanagementsystem hätte dir die Query oben
um die Ohren geschmissen, welches bestellt soll ausgegeben werden?
Das vom ersten Teilbetrag der Summe, oder das vom hundertsten? Es
macht einfach keinen Sinn da bestellt anzugeben ausser du gruppierst
darüber und ziehst die Summe damit nur über die Datenzeilen, die
jeweils bestellt identisch haben.

> Damit wurde alle Datensätze gefiltert, die noch keinen Wert im Datetime Feld "bestellt" hatten.

Dann mach das doch im where wenn du sie nicht in der Summe haben willst?
Having nimmt dir ganze Zeilen aus der Resultattabelle raus, also wenn
das, bei MySQL ziemlich zufällig (wohl physisch erste), hinzugefügte
bestellt = 0 ist, dann wird deine Summe nicht angezeigt, das ist wohl
nicht ganz das was du willst. Wenn du willst das die Zeile nicht in die
Summe kommt, dann filtere es im where hinaus, dass das Probleme gibt,
liegt wohl eher an der immernoch fehlerhaften Query.

Was du suchst dürfte wohl das sein:

SELECT PID, SUM(Anzahl)
  FROM p_bestelldaten
  WHERE bestellt = 0
  GROUP BY PID

Gruss Daniela

Wieder ein SQL Problem mit HAVING/WHERE

Der folgende Beitrag wurde am 15. 03. 2002, 12:58 Uhr von andreas veröffentlicht.

Hi!

> Group By bezieht sich auf die Felder die du beim Select angibst,
> und da steht keine PID, wenn du danach gruppieren willst, dann gib
> sie auch oben an. Was nützt es dir nach etwas zu gruppieren wenn du gar
> nicht weist, zu welcher Gruppe die Ausgabezeile gehört?

Nun ja, darüber hatte sich mysql nicht beschwert, und da ich von Natur aus faul bin....


> SELECT PID, SUM(Anzahl)
>   FROM p_bestelldaten
>   WHERE bestellt = 0
>   GROUP BY PID

Ah, ich dachte where kommt danach! Dumm von mir! Vielen Dank!

Grüße
  Andreas

Wieder ein SQL Problem mit HAVING/WHERE

Der folgende Beitrag wurde am 15. 03. 2002, 15:09 Uhr von Klaus Mock veröffentlicht.

Hallo,

> Nun ja, darüber hatte sich mysql nicht beschwert, und da ich von Natur aus faul bin....

Nun ja, Faulheit kann durchaus etwas Gutes sein, aber vermeide es, schlampig zu werden;-)

> > SELECT PID, SUM(Anzahl)
> >   FROM p_bestelldaten
> >   WHERE bestellt = 0
> >   GROUP BY PID

> Ah, ich dachte where kommt danach! Dumm von mir! Vielen Dank!


Merke:
WHERE kommt vor GROUP BY und bezieht sich auf die Tabellenfelder.
HAVING kommt nach GROUP BY und bezieht sich auf die Ergebnisfelder.

Grüße
  Klaus

Wieder ein SQL Problem mit HAVING/WHERE

Der folgende Beitrag wurde am 15. 03. 2002, 17:47 Uhr von Andreas veröffentlicht.

Hi!

> Nun ja, Faulheit kann durchaus etwas Gutes sein, aber vermeide es, schlampig zu werden;-)

Das das schlampig sein könnte habe ich überhaupt nicht im entferntesten dran gedacht!

> Merke:
> WHERE kommt vor GROUP BY und bezieht sich auf die Tabellenfelder.
> HAVING kommt nach GROUP BY und bezieht sich auf die Ergebnisfelder.

Das habe ich jetzt verstanden, danke Euch beiden!

Grüße
  Andreas

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4