Не соответствуют типы данных как они объявлены в выходных параметрах функции и тем, что вы пытаетесь делать в return. Должны соответствовать друг другу.
sum у нас в pg13 существуют такие:
melkij=> \da pg_catalog.sum
Список агрегатных функций
Схема | Имя | Тип данных результата | Типы данных аргументов | Описание
------------+-----+-----------------------+------------------------+--------------------------------------------------
pg_catalog | sum | numeric | bigint | sum as numeric across all bigint input values
pg_catalog | sum | double precision | double precision | sum as float8 across all float8 input values
pg_catalog | sum | bigint | integer | sum as bigint across all integer input values
pg_catalog | sum | interval | interval | sum as interval across all interval input values
pg_catalog | sum | money | money | sum as money across all money input values
pg_catalog | sum | numeric | numeric | sum as numeric across all numeric input values
pg_catalog | sum | real | real | sum as float4 across all float4 input values
pg_catalog | sum | bigint | smallint | sum as bigint across all smallint input values
Как видно, нет ни одного варианта, который бы возвращал int4
Final statement returns too many columns действительно надо пояснять? Или прямым английским языком всё и так уже сказано?