Точность агрегатной функции для типа данных с ИНТЕРВАЛОМ ОТ ЧАСА До МИНУТЫ в SQL

#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;
  

Я не могу много сказать о других СУБД. Возможно, здесь можно найти дополнительные ответы?