其他业务返回的几个分数存在一个字段中,并用逗号分割。最近出了一个分析,要分析各个纬度得分的平均值,因为数据很多,不能都取到内存中计算,只能用数据库处理。下面是处理方法(暂时解决方案):
select
score.id, sum(score.score_array[1]::int) / count(1) as score1
from(
select id, string_to_array(score_list_array, ',') as score_array
from score
) score
group by score.id
显示某个纬度的结果:类型转换 ::int 在有的ORM中会报错,要改下写法:
cast (score.score_array[1] as integer)
string_to_array函数说明:
<pre>
string_to_array(列名, 分割符),如:
2,3,4 分隔符使用 ,
2;3;4 分隔符使用 ;
</pre>
另,转后的数组下标从1开始