Подтвердить что ты не робот

Как получить десятичные значения при округлении среднего значения в SQL

Вот мой оператор SQL

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

Ответ, который я получаю, - 3 с возможным диапазоном чисел между 1 - 5 в 908 строках.

Мне нужно, чтобы он сказал 3.0 или 3.09. Возможно ли это?

4b9b3361

Ответ 1

Среднее значение будет иметь тот же тип данных, что и значения, поэтому введите значения:

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

Ответ 2

Я не уверен, что это поможет вам черепаномания, но попробуйте это

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

Поплавок является приблизительным. С другой стороны, десятичный знак сделает его более точным, вы можете прочитать по математике и десятичным знакам поплавков. Сначала я боролся с этим и все еще терял время от времени. Надеюсь, это поможет вам.

IN С#       не уверен, если у меня могут возникнуть проблемы с отправкой ответа здесь, но вы попробовали преобразовать его в 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();
    }

Ответ 3

Я не совсем уверен, что вы просите, но я думаю, что вы хотите, чтобы число возвращалось с дополнительной точностью.

Вы завершаете вызов в 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: Типы данных (Transact-SQL).

Ответ 4

Вам даже не нужно делать ROUND, действительно. Вы можете просто преобразовать ваши значения в DECIMAL, например:

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

Ответ 5

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

Он показывает 100 как 100,00 и 100,05 как 100,05