You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中获取列的平均值 及C#实现时类型转换报错解决

问题原因与修复方案

1. 修复SQL语法错误

你当前查询中sum('rating')对列名使用了单引号,SQL中单引号代表字符串常量,该语句实际是对固定字符串"rating"求和,完全无法得到正确的rating列汇总值,这也是你之前尝试AVG()函数运行失败的常见原因。如果需要对列名转义,请使用MySQL的反引号`。

2. 修复类型转换错误

MySQL的COUNT()、SUM()返回的整数结果在C#中对应的类型是System.Int64(long类型),不能直接强制转换为double,请使用Convert.ToDouble()方法做兼容转换,该方法支持将Int64类型安全转换为double。

3. 简化查询逻辑

无需分两次查询sum和count,直接使用MySQL原生AVG()函数一次查询即可得到平均值,还可以避免count为0时的除以0异常。

修复后的代码

public double GetRating(string username)
{
    // 直接使用AVG函数查询,注意表名如果是用户输入一定要做SQL注入防护
    string avgQuery = $"SELECT AVG(`rating`) FROM `{username}`";
    using (MySqlConnection databaseConnection = new MySqlConnection(connectionString))
    using (MySqlCommand avgCommand = new MySqlCommand(avgQuery, databaseConnection))
    {
        try
        {
            databaseConnection.Open();
            var result = avgCommand.ExecuteScalar();
            // 处理表为空时AVG返回NULL的情况
            return result == DBNull.Value ? 0d : Convert.ToDouble(result);
        }
        finally
        {
            databaseConnection.Close();
        }
    }
}

额外提示

直接将用户输入的username拼接进SQL语句存在SQL注入风险,如果username是外部可输入的参数,请提前做白名校验避免恶意注入。

内容的提问来源于stack exchange,提问作者Tom4045

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:06:08