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=>
那么,如何获取货币数据类型的价格列的平均值。
AVG
将 smallint, 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 pc
将 price
替换为 regexp_replace(price::text, '[$,]', '', 'g')::numeric
你可以这样做:
SELECT AVG(price::money::numeric::float8) FROM pc;
以下是 "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=>
那么,如何获取货币数据类型的价格列的平均值。
AVG
将 smallint, 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 pc
将 price
替换为 regexp_replace(price::text, '[$,]', '', 'g')::numeric
你可以这样做:
SELECT AVG(price::money::numeric::float8) FROM pc;