ursus contionabundo: MySQL fehlerhafte Summe

Beitrag lesen

Schritt 1 ist immer: ordentlich notieren!

Denn das hilft ungemein dabei, zu erkennen, was man eigentlich notiert hat. In Deinem Fall:

SELECT
    SUM( auftrag.gesamtpreis ) as g1,
    COUNT( auftrag_rechnung.auftragnr ) as value 
FROM
    auftrag_rechnung
JOIN 
    auftrag_info ON auftrag_info.auftragnr = auftrag_rechnung.auftragnr 
    AND auftrag_info.status = '1'
    AND auftrag_info.date > '2019-01-07'
JOIN
    auftrag_ship ON auftrag_ship.auftragnr = auftrag_rechnung.auftragnr
JOIN
    auftrag ON auftrag.auftragnr = auftrag_rechnung.auftragnr

klappt es leider auch nicht… Aufgrund der Tatsache, dass es für einen Auftrag in der Tabelle "auftrag_ship" mehrere Einträge geben kann, wird der Datensatz doppelt summiert...aber warum?

Womöglich wegen der Art des Joins. Versuchs mal mit einem "Cross Join mit einer Beschränkung der Ergebnisse".

SELECT
    SUM( `auftrag`.`gesamtpreis` ) as g1,
    COUNT( `auftrag_rechnung`.`auftragnr` ) as value 
FROM
    `auftrag_rechnung`,
    `auftrag_info`,
    `auftrag_ship`,
    `auftrag`
WHERE
        `auftrag_info`.`auftragnr` = `auftrag_rechnung`.`auftragnr`
    AND `auftrag_ship`.`auftragnr` = `auftrag_rechnung`.`auftragnr`
    AND `auftrag`.`auftragnr`      = `auftrag_rechnung`.`auftragnr`
    AND `auftrag_info`.`status`    = '1'
    AND `auftrag_info`.`date`      > '2019-01-07'
;