Rolf B: Rechnen direkt in MySQL?

Beitrag lesen

Hallo Bernd,

ich hätte ja fast gesagt: „kein Problem“, aber dann

Zudem kommt noch hinzu, dass ich die Werte aus Zeile mit einem , habe und diese müssten dann in ein . umgewandelt werden.

Hatten wir darüber nicht schon mehrfach diskutiert? Die typengerechte Speicherung von Daten in der DB macht das Leben signifikant leichter.

Wären deine Felder numerisch, könnte man so anfangen:

SELECT a_masseinklverpackungb * a_masseinklverpackungl * a_tiefeinklverpackungb as volumen,
       a_produzierterBestand - a_defekt - a_verlust as menge
  FROM artikel WHERE a_programm=?

Das ist eine Query die dir pro Zeile die gewünschten Werte liefert. Um die kann man eine aggregierende Query herum legen:

SELECT SUM(volumen * menge)
FROM (SELECT a_masseinklverpackungb * a_masseinklverpackungl * a_tiefeinklverpackungb as volumen,
             a_produzierterBestand - a_defekt - a_verlust as menge
      FROM artikel WHERE a_programm=?)

Das Ergebnis ist genau eine Zahl. Allerdings hast Du dann auch nur genau das, und sonst nichts.

Wenn Du diese Rechnung nicht für ein bestimmtes Programm, sondern über alle Programme weg haben willst, kannst Du das so machen:

SELECT a_programm, SUM(volumen * menge)
FROM (SELECT a_programm, 
             a_masseinklverpackungb * a_masseinklverpackungl * a_tiefeinklverpackungb as volumen,
             a_produzierterBestand - a_defekt - a_verlust as menge
      FROM artikel)
GROUP BY a_programm

Die code-Spalte ist jetzt verloren gegangen. Um die korrekt einzubauen, müsste man wissen, wie Code und Progamm zueinander stehen. Haben alle Artikel eines Programms den gleichen Code? Wenn ja, kann man sie mit gruppieren. Wenn nicht, dann geht es nicht, dann ist es auch sinnlos, Code und Summe in einer Query zu ermitteln (weil zu einer Summe ja mehrere Codes gehören).

Bleibt noch ein Problem: Wie rechnest Du in SQL mit deinen Komma-Strings. Wie gesagt: typgerechte Speicherung macht das Leben leichter, und im SQL herumzukonvertieren macht (a) die Query lahm und (b) das SQL kaum noch lesbar. Immerhin hast Du mit MYSQL Glück: Es ist bereit, Fehler zu verzeihen. Laut Doku konvertiert es Strings bei Bedarf in Zahlen. Du musst also nur das Komma durch einen Punkt austauschen. Das geht mit REPLACE(wert, ',', '.'), d.h. wenn Du das jeweils auf die String-Felder deiner Abfrage anwendest, sollte der Versuch, mit dem Ergebnis zu rechnen, es automatisch in eine Zahl umwandeln. Viel Glück 😀

Rolf

--
sumpsi - posui - clusi