查找SQL json列

时间:2018-02-02 12:55:54

标签: sql json postgresql laravel eloquent

假设我的数据库包含以下格式的数据

| id | name        | rating                                      |
-----------------------------------------------------------------|
| 1  | first       | {"looks": 20, "quality": 20, "quantity": 20}|
-----------------------------------------------------------------|
| 2  | second      | {"looks": 30, "quality": 40, "quantity": 20}|
------------------------------------------------------------------

首先,我需要获得json对象中每个项目的平均值。例如,对于项looksquality,获得quantityfirstsecond的平均值。第一项的平均评分为20, 项目second的平均评分为30.然后获得两个项目的平均评分,即2030,这将给我一个决赛结果是25。

我想使用Laravel,Eloquent查询构建器来实现它,但我不介意以原始sql格式获取它。我正在使用Postgres数据库。

我找到了this的答案,但它只使用单个键而不是多行来处理json。任何帮助将不胜感激。

1 个答案:

答案 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;
});