如何获得 MySQL 中一列的平均值

How to get the average of a column in MySQL

我正在尝试找到一种方法来计算列的平均值(作为 double/float 或小数)。我在 MySQL 文档中找到了 AVG 函数,但我无法使用它。目前我有以下代码:

public double GetRating(string username)
        {
            double average;

            MySqlConnection databaseConnection = new MySqlConnection(connectionString);
            string sumQuery = "select sum('rating') from " + username;
            string countQuery = "SELECT COUNT(*) FROM " + username;
            using (MySqlCommand sumCommand = new MySqlCommand(sumQuery, databaseConnection))
            using (MySqlCommand countCommand = new MySqlCommand(countQuery, databaseConnection))

            try
            {
                databaseConnection.Open();
                
                double sum = (Double)sumCommand.ExecuteScalar();
                double columnLength = (Double)countCommand.ExecuteScalar();
                average = sum / columnLength;
                return average;
             }

            finally
            {
                databaseConnection.Close();
            }

            return average;
        }

现在由于某种原因这不起作用。它 returns“无法将类型 'System.Int64' 的对象转换为类型 'System.Double'。”

数据库中存储的数据是一个整数,但我正在尝试将它们转换为双精度。有什么建议或解决方案吗?再次; double/float 或小数对我有用。

内置的AVG函数(聚合函数)可以这样使用:

select avg(rating) from table_name

请注意,与大多数聚合函数一样,平均值将排除空值(1, 2, null 的平均值是 1.5 而不是 1.0)。此外,在 MySQL 中,如果您对小数或整数列求平均值,则 return 数据类型将为 decimal,因此请使用适当的 C# 数据类型。

几件事:

  1. table 中的 rating 列的数据类型是什么?如果它是一个整数而不是浮点数,请相应地更改 sum 的数据类型以避免类型转换错误。
  2. 如您所知,您可以使用 avg() 而不是 sum(),然后除以 count()。您的 SQL 将如下所示:
select avg(rating) from table_name