40

これが私のSQLステートメントです

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

私が取得する答えは、908行3の間の可能な数の範囲です。1 - 5

私はそれを言う必要があり3.0ます3.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#では、ここに回答を投稿するのに問題が発生する可能性があるかどうかはわかりませんが、それをdoubleに変換して、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など)は、最初にデータを別の型にキャストまたは変換する必要があります。

データをさまざまなタイプにキャストするいくつかの方法を示すいくつかの例を次に示します。

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 に答える