Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

SQL Round округление AVG()

Роман Protocol Мыслитель (8562), закрыт 6 лет назад
Всем привет!
По заданию
Определите среднее число орудий для классов линейных кораблей.
Получить результат с точностью до 2-х десятичных знаков.
Выполнил запрос
select round(avg(CAST(numGuns AS FLOAT)),2) [Avg-numGuns]
from classes
where type='bb'
Но результат получается неокруглённый, но число правильное.
Как правильно составить запрос для решения этой задачи?
Спасибо за ответы!
Лучший ответ
Голова Робота Просветленный (36354) 6 лет назад
CAST(numGuns AS FLOAT)) - это зачем?
Некоторые десятичные дроби не имеют точного представления в виде двоичных чисел с плавающей точкой. Поэтому в базах данных обычно используются числа с фиксированной точкой или двоично-десятичные числа (decimal, numeric).
Роман ProtocolМыслитель (8562) 6 лет назад
Я писал без CAST().
Тогда результат получился ровно 9. Я почитал, в книгах написано, что нужно явно привести тип, чтобы деление было не нацело, как в C++.
Как правильно записать?
Голова Робота Просветленный (36354) Видимо, это особенность MSSQL. Попробуй так cast(avg(CAST(numGuns AS FLOAT)) as numeric(12,2))
Остальные ответы
Лайт Ягами Искусственный Интеллект (310555) 6 лет назад
Это особенности MSSQL, остальные СУБД округляют нормально)
Ander Профи (685) 5 лет назад
Select
cast(round(avg(cast(numguns as numeric(4,2))),2) as numeric(4,2))
from classes
where type='bb'
Похожие вопросы