раунд postgres работает в некоторых ситуациях, но не в других - PullRequest
0 голосов
/ 21 октября 2018

Я использую функцию округления для округления чисел.Вот рабочий пример:

select round(3.0/5,1);

У меня есть таблица с именем «оценок», которая содержит, помимо прочего, столбец с именем «ранг».

Вот пример команды и ее вывод:

=> select rank from ratings limit 5;
rank
------
8.6
8.3
7.7
  7
7.9
(5 rows)

Мне бы хотелось получить средний ранг, поэтому я сделал следующее:

=> select avg(rank) from ratings;
avg
------------------
6.93997624861447
(1 row)

Я хотел бы округлить этот результат, чтобы я сделал следующее:

=> select round(avg(rank)) from ratings;
round
-------
7
(1 row)

Я хотел бы сохранить первое десятичное число, однако, поэтому я попробовал это:

=> select round(avg(rank),1) from ratings;
ERROR:  function round(double precision, integer) does not exist
LINE 1: select round(avg(rank),1) from ratings;
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Я нахожу чрезвычайно странным, что это работает, потому что я уже тестировал round (float, int)и это работает (см. первый пример).Также раунд, кажется, работает, когда не передано второго аргумента.

Пожалуйста, объясните, что я делаю неправильно, чтобы я мог это исправить.Спасибо

1 Ответ

0 голосов
/ 21 октября 2018

ROUND, похоже, работает с точными числовыми типами, поэтому вы можете попробовать привести среднее значение к числовому:

select round(cast(avg(rank) as numeric), 1) from ratings

Используемая вами версия ROUND требует ввода числового типа, проверьте документация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...