PostgreSQL中repeat函数报错及重复计算优化问题咨询
问题解决:PostgreSQL中repeat函数报错与重复计算优化
报错原因
PostgreSQL的repeat函数要求第二个参数为整数类型,而ceil(avg(rating)::numeric(10,2))返回的是numeric类型,类型不匹配导致报错。之前尝试转换为text/varchar无效,因为核心问题是参数需要整数而非字符串。
重复计算优化
原查询中avg(rating)::numeric(10,2)重复计算4次,可通过CTE(公共表表达式)预先计算一次平均评分,后续所有字段直接引用该结果,减少重复计算开销。
优化后的完整查询
WITH rating_stats AS ( SELECT avg(rating)::numeric(10, 2) AS avg_rating FROM person_rating ) SELECT round(avg_rating, 2) AS rating_averaged, ceil(avg_rating)::integer AS rating_rounded_up, concat( repeat('★', ceil(avg_rating)::integer), repeat('☆', 5 - ceil(avg_rating)::integer) ) AS rating_as_stars FROM rating_stats;
结果说明
执行上述查询后,将得到期望结果:
{ "rating_averaged": 3.25, "rating_rounded_up": 4, "rating_as_stars": "★★★★☆" }
内容的提问来源于stack exchange,提问作者Mike K
相关产品推荐
相关产品推荐

