Sql 如何获取Postgres中枚举数据类型的平均值?

Sql 如何获取Postgres中枚举数据类型的平均值?,sql,postgresql,Sql,Postgresql,当我试图通过以下查询从我的评论表中获得平均评分时: SELECT AVG(rating) FROM review; 给我以下错误: [2020-07-27 11:42:10] [42883] ERROR: function sum(review_rating_enum) does not exist 我的评级枚举类型为: create type review_rating_enum as enum ('1', '2', '3', '4', '5'); 有没有办法通过此设置从Postgres

当我试图通过以下查询从我的评论表中获得平均评分时:

SELECT AVG(rating) FROM review;
给我以下错误:

[2020-07-27 11:42:10] [42883] ERROR: function sum(review_rating_enum) does not exist
我的评级枚举类型为:

create type review_rating_enum as enum ('1', '2', '3', '4', '5');

有没有办法通过此设置从Postgres获取平均值?

首先必须将枚举转换为文本,然后才能将其转换为整数(因为没有从枚举直接转换为int)


但是对于这样的列,枚举是一个非常糟糕的选择。它应该是一个
integer
(或
smallint
)列,并带有限制允许值的检查约束

您可以在不丢失数据的情况下更改类型,如下所示:

alter table review
   alter rating type integer using rating::text::integer;
   
alter table review
   add constraint check_rating check (rating in (1,2,3,4,5));

@一匹没有名字的马是的,我同意。我希望我能早点发现那件事。我想,我会听从你的建议。谢谢你,博士后新生。我现在意识到我的错误了。谢谢你的询问。它起作用了。但是,我想我会像你建议的那样,将列类型更改为
smallint
。@priosshrsth:数据库名为PostgreSQL或不是“postgre”。
alter table review
   alter rating type integer using rating::text::integer;
   
alter table review
   add constraint check_rating check (rating in (1,2,3,4,5));