Mat*_*zas 2 postgresql average ruby-on-rails jsonb
我有一个jsonb列,它存储多个字段的值,如下所示:
{a: "0.5", b: "0.9" }
Run Code Online (Sandbox Code Playgroud)
我需要从一组记录中获取平均“ a”值。
如果它不是jsonb列,则它非常简单,如下所示:
Apples.average(:a)
Run Code Online (Sandbox Code Playgroud)
但是现在需要的是这样的:
Apples.average(:my_numbers => {:a})
Run Code Online (Sandbox Code Playgroud)
要么
Apples.average("my_numbers['a']")
Run Code Online (Sandbox Code Playgroud)
最有效的方法是什么?
SQL查询为:
SELECT avg((my_numbers->>'a')::numeric)
FROM tbl;
Run Code Online (Sandbox Code Playgroud)
Postgres的操作来获取值用于在一个给定的键json/ jsonb列->>。
这将返回数据类型text。要计算平均值,您需要数字类型。numeric由于此类型可以转换为任何数值数据。