#sql #postgresql #aggregate-functions #precision
#sql #postgresql #агрегатные функции #точность
Вопрос:
Я использую очень маленькую базу данных, которая содержит таблицу со столбцом, содержащим данные типа INTERVAL HOUR TO MINUTE
. Хотя это означает, что в таблице будут храниться только временные интервалы с точностью до минуты, используемая мной система баз данных (PostgreSQL) вернет интервал с точностью до микросекунды для агрегатной функции, такой как AVG()
. Могу ли я полагаться на это поведение, или возможно, что в будущем система баз данных будет возвращать значения только с точностью до минуты? Как ведут себя в этом отношении другие СУБД?
Я спрашиваю, потому что значения в таблице не требуют точности больше минуты, но я ожидаю более высокой точности при использовании агрегатной функции.
Ответ №1:
Агрегатная функция, такая как avg()
, должна возвращать общую форму interval
, поскольку среднее из нескольких значений может находиться между ними. Это определенно не изменится в будущих выпусках. Кроме того, типы данных идентичны внутренне. Усекаются только наименее значимые части.
Поведение аналогично с другими типами данных. Если вы вычисляете среднее значение по integer
столбцу, вы получаете результат типа numeric
, который может содержать точные результаты.
Если вы хотите, чтобы результаты были усечены (не по вашему запросу), вы всегда можете привести к interval hour to minute
явно, чтобы быть уверенным.
SELECT avg(i)::interval hour to minute from mytbl;
Я не могу много сказать о других СУБД. Возможно, здесь можно найти дополнительные ответы?