Abfrage mit SUM und GROUP fehlerhaft

Zero2000

Erfahrenes Mitglied
Hallo

Ich habe hier eine Abfrage mit der ich nicht klarkomme.
Code:
SELECT sorte, zugang_eu, zugang_ew, abgang_eu, abgang_ew, ein_datum, ein_zeit, bestand_eur, eur_menge, bestand_ew, ew_menge, SUM(bestand_akt_neu) AS bestand_gesamt FROM ls_daten GROUP BY bestand_akt_neu WHERE bestand_akt_neu >0 ORDER BY sorte ASC
Als Fehler gibt er mir:
Code:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE bestand_akt_neu >0 ORDER BY sorte ASC' at line 1
Ich möchte halt alles aus der Spalte bestand_akt_neu zusammengezählt bekommen.
Kann ich auch nach dem SELECT diese Werte zusammenzählen oder ist es schon besser (einfacher) das in der Abfrage unterzubringen.

MfG Maik
 
Du hast GROUP BY und WHERE vertauscht.

Zero2000 hat gesagt.:
Ich möchte halt alles aus der Spalte bestand_akt_neu zusammengezählt bekommen.
Kann ich auch nach dem SELECT diese Werte zusammenzählen oder ist es schon besser (einfacher) das in der Abfrage unterzubringen.
Ich verstehe nicht, was Du meinst.

Gruß hpvw
 
Hallo Maik,
das GROUP BY gehört immer hinter das WHERE, dadurch wird der Fehler verursacht.

Aber auch wenn Du das korrigierst, wirst Du nicht glücklich mit Deinem SQL-Statement. Es ist ziemlich unsinnig, nach der Spalte, die man summiert haben will zu gruppieren, dies würde bedeuten, dass alle Datensätze mit identischem Wert in bestand_akt_neu zu einer Zeile zusammengefasst werden, ich wüsste nicht wozu das gut sein soll.

Du solltest ein anderes Gruppierfeld wählen, je nach dem, was du zusammenfassen möchtest - z.B. alle gleichen Sorten, dann "GROUP BY sorte". Dir muss dann aber auch klar sein, dass die Ausgabe der anderen Felder (zugang_eu, zugang_ew, abgang_eu, abgang_ew, ein_datum, ein_zeit, bestand_eur, usw.) dann jeweils dem Wert des ersten Datensatzes in der zusammengefassen Gruppe entsprechen - wahrscheinlich auch nicht das gewünschte Ergebnis.
Also entweder Du wendest auf alle anderen Felder auch sinnvolle GROUP-Funktionen an (SUM, AVG, MIN, MAX, GROUP_CONCAT, ...), oder Du lässt sie weg, oder Du bist sicher, dass diese Felder pro Sorte (um bei dem Beispiel zu bleiben) auch identisch sind oder es ist Dir wurscht was da rauskommt.

Wenn Du nun aber (und ich muss so weit ausholen, weil Du nicht genau schreibst, was genau Du haben willst) ALLE Zeilen ausgeben willst und in jeder Zeile zusätzlich eine Spalte mit der Summe über alle bestand_akt_neu, dann könntest Du auf ein Subquery joinen:
Code:
SELECT
  sorte, zugang_eu, zugang_ew, ..., sum.summe
FROM
  ls_daten
JOIN
  (SELECT SUM(bestand_akt_neu) AS summe FROM ls_daten WHERE ...) AS sum
WHERE
  ...
So kriegst Du natürlich in der sum.summe-Spalte für jede Zeile den gleichen Wert, aber vielleicht ist es das was Du suchst...

Schönen Abend noch,
Martin
 
Erstmal vielen Dank für eure Hilfe. Ich habe mich wohl ein "wenig" unklar ausgedrückt. :eek:
Also ich habe ja in meiner tabelle ein feld bestand_akt_neu. Und da wollte ich alle Bestände zusammenrechnen und am Ende meiner Tabelle ausgeben. Das Bild soll verdeutlichen was ich meine.

2.Thema
In einer for-Schleife hole ich mir dann aus der DB (mysql) die Daten so:
PHP:
$ew_menge=mysql_result($res, $i, "ew_menge");
Die Anzahl EUR.-Paletten berechne ich mit den DB-Feldern:
PHP:
$count_eu = $bestand_eur/$eur_menge;
Hier ist das problem, das ich die auch zusammengezählt haben möchte und es einfach nicht schaffe. Habe mir schon gedacht nochmal eine Schleife durchlaufen zu lassen, aber habs bis jetzt nicht hinbekommen.

MfG Maik
 

Anhänge

  • abc.gif
    abc.gif
    1,4 KB · Aufrufe: 28
Mir fällt es zwar noch schwer, Deinen Ausführungen zu folgen, aber ich versuche dennoch mal, zu eraten was Du willst. Du willst also die Summe des einen Feldes durch die Summe des anderen teilen? Dann geht das so:
SQL:
select
  #...
  sum(`feld1`) / sum(`feld2`) as summeDurchSumme
from #...
Gruß hpvw
 
Nein, ich will laut dem Bild was ich angehängt habe nur die Bestände zusammenrechnen.
Das andere lassen wir einfach mal weg.

MfG Maik
 
Zurück