Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找SQL json列中值平均值的多列平均值_Sql_Json_Postgresql_Laravel_Eloquent - Fatal编程技术网

查找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;
});