40

这是我的 SQL 语句

SELECT ROUND(AVG(column_name), 100) 
FROM [database].[dbo].[table]

我检索到的答案可能是 908 行3之间的数字范围。1 - 5

我需要它说3.03.09。这可能吗?

4

5 回答 5

113

平均值将与值具有相同的数据类型,因此转换值:

SELECT ROUND(AVG(CAST(column_name AS FLOAT)), 2) FROM [database].[dbo].[table]
于 2012-11-05T17:49:03.997 回答
5

我不确定这是否会帮助你的骷髅癖,但试试这个

    SELECT CAST(AVG(CAST(column_name as DECIMAL(10,2))) AS DECIMAL(10,2))FROM [table_name]

浮点数是近似值,另一方面,小数会使其更加精确,您可能需要阅读浮点数数学和小数。起初我为此感到挣扎,但有时仍然感到迷茫。希望这会帮助你。

在 C# 中,不确定我是否会因为在此处发布答案而遇到麻烦,但您是否尝试过将其转换为双精度并使用ExecuteScalar()

尝试这个:

    protected void Page_Load(object sender, EventArgs e)
    {
     SqlConnection conn= sqlconnectionstring;
     SqlCommand cmd = new SQLCommand("SELECT STATEMENT",conn);
     cmd.CommandType = CommandType.Text;
     conn.Open();
     Double result = Convert.ToDouble(cmd.ExecuteScalar());
     lblresult.text = "the result is " + result;
     conn.Dispose();
     cmd.Dispose();
    }
于 2012-11-06T14:28:06.470 回答
4

你甚至不需要在ROUND那里做一个,真的。您可以将您的值转换为DECIMAL,如下所示:

SELECT AVG(CONVERT(DECIMAL(16,2),YourColumn)) 
FROM YourTable
于 2012-11-05T17:54:49.960 回答
3

我不完全确定您要问什么,但我认为您希望以更高的精度返回数字。

您将调用包装在ROUND函数中,但如果您的列的数据类型没有任何大于 0 的精度(例如 int),则需要先将数据 CAST 或 CONVERT 转换为另一种类型。

以下是一些示例,说明了将数据转换为不同类型的几种方法:

SELECT CAST(100 AS decimal(5, 2)) -- Gives you "100.00"
      ,CAST(100 AS float) --<== Gives you "100"
      ,CAST(100.0 AS float) --<== Gives you "100"
      ,CAST(100.01 AS float) --<== Gives you "100.01"

另外,请查看MSDN:数据类型 (Transact-SQL)

于 2012-11-05T17:54:13.933 回答
0
CAST(AVG(column_name) AS DECIMAL(5, 2))

它显示 100 为 100.00 和 100.05 为 100.05

于 2019-06-28T13:58:21.387 回答