假设我的数据库包含以下格式的数据
| id | name | rating |
-----------------------------------------------------------------|
| 1 | first | {"looks": 20, "quality": 20, "quantity": 20}|
-----------------------------------------------------------------|
| 2 | second | {"looks": 30, "quality": 40, "quantity": 20}|
------------------------------------------------------------------
首先,我需要获得json对象中每个项目的平均值。例如,对于项looks
和quality
,获得quantity
,first
和second
的平均值。第一项的平均评分为20,
项目second
的平均评分为30.然后获得两个项目的平均评分,即20
和30
,这将给我一个决赛结果是25。
我想使用Laravel,Eloquent查询构建器来实现它,但我不介意以原始sql格式获取它。我正在使用Postgres数据库。
我找到了this的答案,但它只使用单个键而不是多行来处理json。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用集合:
$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;
});