mysql中SUM()的返回类型是什么?

qwr*_*qwr 7 c# mysql

我正在用C#.NET编写一个程序我想收集一个类的总频率(假设每个类有很多单词,每个单词在相应的类中都有自己的频率)

所以我在mysql中使用了sum()函数.但是有一个错误说我的演员是错的.

 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...//
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 8

MySql中的SUM将返回十进制或双精度值,具体取决于"频率"中的类型.来自SUM文档:

SUM()和AVG()函数返回精确值参数(整数或DECIMAL)的DECIMAL值,以及近似值参数的DOUBLE值(FLOAT或DOUBLE).(在MySQL 5.0.3之前,SUM()和AVG()为所有数字参数返回DOUBLE.)

如果你想要一个整数,Convert无论源类型是什么,你都可以用它来获得:

total_freq = Convert.ToInt32(result["sum_of_freq"]);
Run Code Online (Sandbox Code Playgroud)

这里的优点是Convert.ToInt32无论从数据库返回什么类型的值都可以工作,只要它是数字类型.


rbu*_*rbu 5

除了 Reed 所说的,您还可以在 SQL 中进行整数转换:

CAST(SUM(frequency) as INT) as sum_of_freq
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的。不能转换为 INT,需要转换为 UNSIGNED。见 http://stackoverflow.com/a/8895978/792203 (2认同)