[英]How do I get AVG of enum data type in 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 获取 AVG?
您首先必须将枚举转换为文本,然后可以将其转换为 integer(因为没有从枚举直接转换为 int)。
select avg(rating::text::integer)
from review;
但是对于这样的列来说,枚举是一个非常糟糕的选择。 它应该是一个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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.