2012-05-14 15 views
6

Estoy escribiendo un programa en C# .NET me gustaría recoger la frecuencia total de una clase (deja imaginar cada clase tiene muchas palabras y cada palabra tiene su propia frecuencia en la clase correspondiente)¿Cuál es el tipo de devolución de SUM() en mysql?

así que utilicé la función sum() en mysql. Pero hay un error que dice que mi yeso está equivocado.

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

debe ser el mismo tipo que la expresión; a saber, el tipo de datos de 'frecuencia' en su base de datos. – BeemerGuy

+0

posible duplicado de [Tipo de datos del resultado SUM en MySQL] (http://stackoverflow.com/questions/323294/datatype-of-sum-result-in-mysql) –

+1

@JoelEtherton: no es exactamente un duplicado. Sin embargo, parte de la información puede ser útil. – user7116

Respuesta

6

SUM en MySql devolverá un valor decimal o doble, según el tipo dentro de "frecuencia". Desde el documentation for SUM:

la suma() y AVG() devuelven un valor decimal para argumentos exacto valor (número entero o decimal) y un valor doble para argumentos aproximado de valor (FLOAT o doble). (Antes de MySQL 5.0.3, SUM() y AVG() DOBLE retorno de todos los argumentos numéricos.)

Si desea un entero, puede utilizar Convert de conseguir uno sin importar el tipo de fuente pasa a ser :

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

la ventaja en este caso es la Convert.ToInt32 funcionará sin importar qué tipo de valor devuelto por la base de datos, siempre que sea un tipo numérico.

2

además de lo que dijo Reed, también se puede hacer el molde entero en SQL:

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

Esto es incorrecto. No se puede convertir a INT, es necesario enviarlo a UNSIGNED. Ver http://stackoverflow.com/a/8895978/792203 – Baxny

Cuestiones relacionadas