mjr: Mysql - Sum addiert in einer spalte nicht richtig

Hallo liebe Forumgemeinde,

ich habe ein Problem mit einer SQL-Abfrage.
Die Funktion SUM zählt eine Spalte nicht richtig zusammen.

Hier sind die Rohdaten nach der Abfrage:

  
SELECT SpielerID, Drittel, Art, Laenge  
FROM Strafe  
WHERE SpielerID = 16  

Spieler ID, Drittel, Art, Laenge
'16', '1', '16', '2'
'16', '3', '3', '2'
'16', '1', '8', '2'
'16', '2', '21', '2'
'16', '3', '21', '2'
'16', '1', '4', '2'
'16', '2', '19', '2'
'16', '2', '21', '2'
'16', '2', '10', '2'
'16', '3', '2', '2'
'16', '3', '4', '2'
'16', '3', '4', '2'
'16', '3', '5', '10'

Ich möchte nun das Feld "Laenge" summieren, meine Abfrage ist:

  
SELECT SpielerID, Drittel, Art, Laenge,  
SUM(Art),  
SUM(Laenge),  
SUM(Drittel)  
FROM Strafe  
WHERE SpielerID = 16  

Mein Ergebnis:

Spieler ID, Drittel, Art, Laenge,Summe(Art), Summe(Laenge), SUM(Drittel)
16 1 16 2 138 16 29

Die Spalte Laenge wird falsch zusammengezählt.
SQL gibt mir einen Wert von 16, in Wirklichkeit sind es aber 34.
Art und Drittel werden richtig zusammen gezählt.

Drittel, Art und Summe sind jeweils als "Enum" angelegt.

Kann mir jemand erklären warum SUM in dem Feld Laenge falsch rechnet?!?

BTW. kann mir jemand sagen, wie meine SQL-Abfragen in so tolle ASCII-Zeichen umwandeln kann, wie ich es hier im Forum gesehen habe?

  1. Hi,

    Ich möchte nun das Feld "Laenge" summieren, meine Abfrage ist:

    SELECT SpielerID, Drittel, Art, Laenge,
    SUM(Art),
    SUM(Laenge),
    SUM(Drittel)
    FROM Strafe
    WHERE SpielerID = 16

      
    Gute DBMS lehnen so ein Statement ab, da Gruppenfunktionen und normale Spalten selektiert werden, ohne daß gruppiert wird ...  
    MySQL erlaubt sowas trotzdem (und gibt dann teilweise zufällig Werte für die nicht-gruppierten Spalten aus - siehe die 1, die Du für "Drittel" erhältst).  
    Inwieweit die Gruppenfunktionen auch zufällig sind, weiß ich nicht.  
      
    
    > BTW. kann mir jemand sagen, wie meine SQL-Abfragen in so tolle ASCII-Zeichen umwandeln kann, wie ich es hier im Forum gesehen habe?  
      
    Häää?  
      
    cu,  
    Andreas
    
    -- 
    [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
    [O o ostern ...](http://ostereier.andreas-waechter.de/)  
      
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.  
    
    
    1. Danke für deine schnelle Antwort!

      Wenn ich dich richtig Verstanden habe, sollte doch die Abfrage

        
      SELECT SpielerID,  
      SUM(Laenge)  
      FROM Strafe  
      GROUP BY SpielerID  
      
      

      die richtige Summe von Laenge ausgeben oder?
      (Where-Statement habe ich weggelassen)

      Leider wird wieder nicht richtig zusammen gezaehlt :(

      1. Hm sollte aber so funktionieren, wüßte nicht was an dem Statement falsch sein sollte.

        Vielleicht verwendest du den falschen Datentyp bei den Spalten.
        Welchen hast du da genommen?

        Weiss aber auch nicht ob das beim Summieren z.B bei varchar Feldern, Fehler mitbringt.

        lg Flash

  2. Hallo,

    Die Funktion SUM zählt eine Spalte nicht richtig zusammen.

    Drittel, Art und Summe sind jeweils als "Enum" angelegt.

    Wie sieht die ENUM-Deklaration für Laenge aus?
    Ich tippe auf

    ENUM('2','??','??', '10', ...)

    wobei ich die ?? nicht kenne.

    Das entspricht den Indizes
    ENUM('2','??','??', '10', ...)
          1    2    3     4

    lt.:http://dev.mysql.com/doc/refman/5.1/de/enum.html
    Wenn Sie einen ENUM-Wert in einem numerischen Kontext abrufen, wird der Index des Spaltenwerts zurückgegeben.

    12 Mal 1 + 1 Mal 4 = 16

    viele Grüße

    Axel