在舍入SQL中的平均值时如何检索小数

时间:2012-11-05 17:44:20

标签: sql sql-server sql-server-2008

这是我的SQL语句

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

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

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

5 个答案:

答案 0 :(得分:95)

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

SELECT ROUND(AVG(CAST(column_name AS FLOAT)), 2) FROM [database].[dbo].[table]

答案 1 :(得分:5)

我不确定这是否会帮助你skullomania,但试试这个

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

浮点数是近似值,另一方面,十进制数将使其更精确,您可能想要读取浮点数数学和小数。我一开始就挣扎着,有时还会感到迷茫。希望这会帮助你。

IN 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();
    }

答案 2 :(得分:3)

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

SELECT AVG(CONVERT(DECIMAL(16,2),YourColumn)) 
FROM YourTable

答案 3 :(得分:2)

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

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

以下是一些示例,说明了CAST数据到不同类型的几种方法:

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: Data Types (Transact-SQL)

答案 4 :(得分:0)

CAST(AVG(column_name) AS DECIMAL(5, 2))

显示100为100.00 和 100.05为100.05