我正在用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)
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无论从数据库返回什么类型的值都可以工作,只要它是数字类型.
除了 Reed 所说的,您还可以在 SQL 中进行整数转换:
CAST(SUM(frequency) as INT) as sum_of_freq
Run Code Online (Sandbox Code Playgroud)