2012-05-14 12 views
6

Ich bin ein Programm in C# .NET Schreiben Ich möchte die Gesamthäufigkeit einer Klasse sammeln (lassen Sie sich vorstellen, jede Klasse viele Worte und jedes Wort hat seine eigene Frequenz in der entsprechenden Klasse hat) i verwendetWas ist der Rückgabetyp von SUM() in mysql?

So die Funktion sum() in mysql. Aber es gibt einen Fehler, der besagt, dass meine Besetzung falsch ist.

public void average_each_type() 
     { 
      MySqlDataReader result; 
      int total_freq = 0; 
      string type = ""; 

      command.CommandText = "select class_name ,SUM(frequency) as sum_of_freq from training_set group by class_name "; 


       result = command.ExecuteReader(); 
       while (result.Read()) 
       { 

        total_freq = (int)result["sum_of_freq"]; //error happened here 
        type = result["class_name"].ToString(); 
        //.....then so on...// 
+2

Sollte der gleiche Typ wie der Ausdruck sein; nämlich der Datentyp von 'frequency' in Ihrer Datenbank. – BeemerGuy

+0

mögliches Duplikat von [Datentyp von SUM Ergebnis in MySQL] (http://stackoverflow.com/questions/323294/datatype-of-sum-result-in-mysql) –

+1

@JoelEtherton: nicht genau ein Duplikat. Einige der Informationen können jedoch nützlich sein. – user7116

Antwort

6

SUMME in MySql gibt einen Dezimal oder doppelten Wert zurück, abhängig vom Typ innerhalb der "Häufigkeit". Von den documentation for SUM:

die Summe() und AVG() Funktionen geben einen Dezimalwert für die exakten Wert Argumente (integer oder DECIMAL) und einen DOUBLE-Wert für ungefähren Wert Argumente (FLOAT oder DOUBELT). (Vor MySQL 5.0.3, SUM() und AVG() return DOUBLE für alle numerischen Argumente.)

Wenn Sie eine ganze Zahl möchten, können Sie Convert verwenden, eins zu bekommen, egal, was die Quelle Typ sein geschieht :

total_freq = Convert.ToInt32(result["sum_of_freq"]); 

der Vorteil hierbei ist die Convert.ToInt32 egal funktionieren wird, welche Art von Wert aus der Datenbank zurückgegeben wird, vorausgesetzt, es ist ein numerischer Typ ist.

2

Zusätzlich zu dem, was sagte Reed, können Sie auch die Integer-Besetzung in SQL:

CAST(SUM(frequency) as INT) as sum_of_freq 
+1

Das ist falsch. Kann nicht nach INT übertragen, muss nach UNSIGNED umgewandelt werden. Siehe http://stackoverflow.com/a/8895978/792203 – Baxny