以下是"pc"表,其中包含有关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=>
那么,如何获得货币数据类型的price列的平均值呢。
SELECT AVG(price::numeric) FROM pc;
或
根据PostgreSQL 8.4的货币类型
select avg(regexp_replace(price::text, '[$,]', '', 'g')::numeric) from pc
您需要删除卢比符号(₹ )第一
如何删除表中特定列的第一个字符?
之后CCD_ 1该查询工作正常。
或者你可以试试:
SELECT AVG(RIGHT(price,-1)::numeric) FROM pc;
你可以做:
SELECT AVG(price::money::numeric::float8) FROM pc;
AVG
将smallint, int, bigint, real, double precision, numeric, or interval
作为参数,根据您的表,您似乎没有将其存储为其中之一。
将值强制转换为其中任何一个,或者更改列数据类型以使用postgresql中的AVG。
http://www.postgresql.org/docs/current/static/functions-aggregate.html
您可以尝试使用正则表达式。而不是SELECT AVG(price) FROM pc
用regexp_replace(price::text, '[$,]', '', 'g')::numeric
替换price