Money数据类型的平均值



以下是"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;

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

将值强制转换为其中任何一个,或者更改列数据类型以使用postgresql中的AVG。

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

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

相关内容

  • 没有找到相关文章

最新更新