繁体   English   中英

如何在 Postgres 中获取枚举数据类型的 AVG?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM