如何使用Rails 4.2和Postgresql 9.4计算jsonb字段的平均值?

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)

最有效的方法是什么?

Erw*_*ter 5

SQL查询为:

SELECT avg((my_numbers->>'a')::numeric)
FROM   tbl;
Run Code Online (Sandbox Code Playgroud)

Postgres的操作来获取用于在一个给定的键json/ jsonb->>

这将返回数据类型text。要计算平均值,您需要数字类型。numeric由于此类型可以转换为任何数值数据。