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

How to calculate average values of a jsonb field with Rails 4.2 and Postgresql 9.4?

我有一个 jsonb 列,它存储多个字段的值,如下所示:

{a: "0.5", b: "0.9" }

我需要从一组记录中获取平均 "a" 值。

如果它不是一个 jsonb 列,那么它很简单,就像这样:

Apples.average(:a)

但现在需要的是这样的东西:

Apples.average(:my_numbers => {:a})

Apples.average("my_numbers['a']")

最有效的方法是什么?

SQL 查询将是:

SELECT avg((my_numbers->>'a')::numeric)
FROM   tbl;

The Postgres operator to get the value for a given key in a json / jsonb column is ->>.

这个returns数据类型text。要计算平均值,您需要一个数字类型。转换为 numeric 因为这个可以处理任何数字数据。