查找SQL json列中值平均值的多列平均值
假设我有一个包含以下格式数据的数据库查找SQL json列中值平均值的多列平均值,sql,json,postgresql,laravel,eloquent,Sql,Json,Postgresql,Laravel,Eloquent,假设我有一个包含以下格式数据的数据库 首先,我需要获得json对象中每个项目的平均评级。例如,对于第一个项目和第二个项目,获取外观、质量和数量的平均值。第一项的平均评分为20分, 第二项的平均评分为30分。然后得到两个项目的平均评分,即20和30,最终结果为25 我想使用Laravel实现这一点,这是一个雄辩的查询生成器,但我不介意使用原始sql格式。我正在使用Postgres数据库 我已经找到了答案,但它只处理带有单个键的json,而不是多行。如有任何帮助,我们将不胜感激。您可以使用收藏:
首先,我需要获得json对象中每个项目的平均评级。例如,对于第一个
项目和第二个项目,获取外观
、质量
和数量
的平均值。第一项的平均评分为20分,
第二项的平均评分为30分。然后得到两个项目的平均评分,即20
和30
,最终结果为25
我想使用Laravel实现这一点,这是一个雄辩的查询生成器,但我不介意使用原始sql格式。我正在使用Postgres数据库
我已经找到了答案,但它只处理带有单个键的json,而不是多行。如有任何帮助,我们将不胜感激。您可以使用收藏:
$collection = Model::get();
$ratings = $collection->map(function($i) {
return collect(json_decode($i->rating))->avg();
});
您希望在结果中添加平均评分:
$collection = Model::get();
$collection->transform(function($i) {
$i->average = collect(json_decode($i->rating))->avg();
return $i;
});
你知道JSON列中的所有键吗?是的,我知道所有键。它们对所有行都是一样的。你应该尝试在单独的列中进行这种类型的计算。我同意…但是这已经在生产中的实时系统上进行了。虽然你得到了答案,但是对于100或1000行来说速度太慢了。有可能在查询生成器中使用此解决方案吗?在哪里可以在调用get方法之前过滤结果?
$collection = Model::get();
$collection->transform(function($i) {
$i->average = collect(json_decode($i->rating))->avg();
return $i;
});