PostgreSQL функция round
Хочу сделать округление числа до двух цифр после запятой:
SELECT SUM(price), COUNT(price), round(CAST(SUM(price) as real)/CAST(COUNT(price) as real),2) FROM purchases INNER JOIN goods ON purchases.id_good=goods.id_good where date>='2020-05-01' and date<='2020-05-07'
Но при round(CAST(SUM(price) as real)/CAST(COUNT(price) as real),2) таком выражении выдает ошибку
Ошибка SQL:
ERROR: function round(real, integer) does not exist
LINE 1: ...) AS total FROM (SELECT SUM(price), COUNT(price), round(CAST...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
В операторе:
SELECT COUNT(*) AS total FROM (SELECT SUM(price), COUNT(price), round(CAST(SUM(price) as real)/CAST(COUNT(price) as real),2) FROM purchases INNER JOIN goods ON purchases.id_good=goods.id_good where date>='2020-05-01' and date<='2020-05-07') AS sub
А вот так работает round(CAST(SUM(price) as real)/CAST(COUNT(price) as real),2)
Ответы (1 шт):
Автор решения: Мелкий
→ Ссылка
Изначально в postgresql есть такие функции round (да, они разные и так и задумано):
melkij=> \df round
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+-------+------------------+---------------------+------
pg_catalog | round | double precision | double precision | func
pg_catalog | round | numeric | numeric | func
pg_catalog | round | numeric | numeric, integer | func
Функции round(real, integer) действительно нет. При том форма с двумя аргументами есть только для numeric. То есть, вы пытаетесь привести аргументы функции не к тому типу данных, который нужен.