2012-05-14 38 views
6

Tôi đang viết một chương trình trong C# .NET Tôi muốn thu thập tổng tần số của một lớp (hãy tưởng tượng mỗi lớp có nhiều lời nói và mỗi từ có tần số riêng của mình trong các lớp tương ứng)Loại trả về của SUM() trong mysql là gì?

Vì vậy, tôi đã sử dụng hàm sum() trong mysql. Nhưng có một lỗi nói rằng diễn viên của tôi là sai.

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

nên là loại giống như biểu quan điểm; cụ thể là, kiểu dữ liệu của 'frequency' trong cơ sở dữ liệu của bạn. – BeemerGuy

+0

có thể trùng lặp của [Kiểu dữ liệu của kết quả SUM trong MySQL] (http://stackoverflow.com/questions/323294/datatype-of-sum-result-in-mysql) –

+1

@JoelEtherton: không chính xác là một bản sao. Tuy nhiên, một số thông tin có thể hữu ích. – user7116

Trả lời

6

SUM trong MySql sẽ trả về giá trị thập phân hoặc kép, tùy thuộc vào loại trong "tần số". Từ documentation for SUM:

Các SUM() và AVG() chức năng trả về một giá trị thập phân cho các đối số chính xác giá trị (số nguyên hoặc số thập phân), và một giá trị DOUBLE cho các đối số gần đúng giá trị (float hay double). (Trước khi MySQL 5.0.3, SUM() và AVG() return DOUBLE cho tất cả các đối số.)

Nếu bạn muốn một số nguyên, bạn có thể sử dụng Convert để có được một không có vấn đề gì loại nguồn sẽ xảy ra là :

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

Lợi thế ở đây là Convert.ToInt32 sẽ hoạt động bất kể loại giá trị nào được trả về từ cơ sở dữ liệu, miễn là loại số.

2

Ngoài những gì Reed cho biết, bạn cũng có thể làm diễn viên số nguyên trong SQL:

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

Điều này không đúng. Không thể truyền tới INT, cần truyền sang UNSIGNED. Xem http://stackoverflow.com/a/8895978/792203 – Baxny

Các vấn đề liên quan