2012-05-02 153 views
3

我想從一列計算平均數PostgreSQL中PostreSQL錯誤:函數AVG(字符改變)不存在

SELECT AVG(col_name) 
From TableName 

它給我這個錯誤:

ERROR: function avg (character varying) does not exist 

LINE 1: SELECT AVG(col_name) 
      ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 
+1

顯然該列不是一個數字而是一個字符列。不要將數字存儲在varchar(或char)列中。將數據類型更改爲整數,數字或任何最適合您的數據類型。 –

回答

6

商店號碼數字字段,整數,小數或其他。但不在文本/ varchar字段中。

查閱所有numeric data types的手冊。


討厭workaound:CAST一些記錄到一個數值,讓別人爲文本。例如:

/* 
create temp table foo AS 
SELECT x FROM (VALUES('x'),('1'),('2')) sub(x); 
*/ 

WITH cte AS (
SELECT 
    CASE 
     WHEN x ~ '[0-9]' THEN CAST(x AS decimal) -- cast to numeric field 
    END AS num, 
    CASE 
     WHEN x ~ '[a-zA-Z]' THEN x 
    END AS a 
FROM foo 
) 
SELECT AVG(num), COUNT(a) FROM cte; 
+0

在這個專欄中我應該有數字和字母,而我想要計算的數字是平均數, – Alex

相關問題