#sql #db2 #aggregate-functions #where-clause
#sql #db2 #агрегатные функции #where-предложение
Вопрос:
Очень простой запрос, который работает
select avg(price) from cars where type = 'electric';
результат
1
---------------------------------
45000,00000000000
Я хочу удалить,00000000000, чтобы получить
1
---------------------------------
45000
Я пробовал приводить и округлять, но безуспешно.
Я на Db2
Этот приятный ltrim отлично работает для всех типов автомобилей
select replace(ltrim(replace(price,'0',' ')),' ','0') from cars;
но использование with avg возвращает строку с 00000
select replace(ltrim(replace(avg(price),'0',' ')),' ','0') from cars where type = 'electric';
результат..
45000.00000000000
🙁
Изменяется только значение , .
Ответ №1:
cast
редактирование этого значения должно просто работать:
select cast(avg(price) as int) as avg_int
from cars
where type = 'electric';
Ответ №2:
Приведение к целому числу, как предложено в другом ответе, будет работать.
Однако имейте в виду, что
- вы будете усекать любые десятичные значения.
- вы конвертируете из одного типа в другой.
Вы можете разрешить # 1 путем приведения после ROUND()
select int(round(avg(price),0)) as avg_int
from cars
where type = 'electric'
Вы можете разрешить # 2, используя DECIMAL()
или ZONED()
с нулем для масштабирования в зависимости от исходного типа столбца.
select dec(avg(price),10,0) as avg_dec
from cars
where type = 'electric'
И, конечно ROUND()
, можно использовать DECIMAL()
ZONED()
также с or …