Money 数据类型的平均值

Average value for Money Datatype

以下是 "pc" table 其中包含有关 pc 的详细信息。

user=> SELECT * FROM pc;
 code |  model   | speed | ram  |  hd  | cd  |  price  
------+----------+-------+------+------+-----+---------
  101 | Imac     |  2000 | 4096 |  500 | 16x | ₹550.00
  102 | G450     |  1500 | 2048 |  500 | 8x  | ₹450.00
(2 rows)
user=>

现在我想取价格的平均值。于是尝试了下面的方法。但是它会产生错误。

user=> SELECT AVG(price) FROM pc;
ERROR:  function avg(money) does not exist
LINE 1: SELECT AVG(price) FROM pc;
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
user=>

那么,如何获取货币数据类型的价格列的平均值。

AVGsmallint, int, bigint, real, double precision, numeric, or interval 作为参数,根据您的 table 看来您没有将其存储为其中之一。

要么将值转换为其中之一,要么更改列数据类型以在 postgresql 中使用 AVG。

http://www.postgresql.org/docs/current/static/functions-aggregate.html

SELECT AVG(price::numeric) FROM pc;

根据 PostgreSQL 8 .4 的 Monetary Types

select avg(regexp_replace(price::text, '[$,]', '', 'g')::numeric) from pc

您需要先删除卢比符号 ( ₹ )。

How do I remove the first characters of a specific column in a table?

在那之后 SELECT AVG(price::numeric) FROM pc; 这个查询工作正常。

或者你可以试试:

SELECT AVG(RIGHT(price,-1)::numeric) FROM pc;

您可以尝试使用正则表达式。 而不是 SELECT AVG(price) FROM pcprice 替换为 regexp_replace(price::text, '[$,]', '', 'g')::numeric

你可以这样做:

SELECT AVG(price::money::numeric::float8) FROM pc;