在Rails中,如何按数组字段中元素的个数进行分组?
In Rails, how to group by count of elements in array field?
给定 ActiveRecord 模型 Foo
,其字段 a_of_i
是整数数组:
# Foo:
id, a_of_i
101, [1,2,3,4]
102, []
103, [11, 12, 13, 14, 15, 16]
104, [1, 2, 52, 53]
是否有一个 ActiveRecord 查询将按数组列中#elements 的计数进行分组,例如 produce:
# Foo.some_query returns something like [[count, id], [count, id]...]
=> [ [6, 103], [4, 101], [4, 104], [0, 102] ]
# or perhaps, if easier:
=> { 6 => [103], 4 => [101,104], 0 => [102] }
剧透
Foo.select('id, cardinality(a_of_i)').pluck('cardinality(a_of_i)', :id)
创建 table
CREATE TABLE foos(
id text,
a_of_i integer[]
);
在ruby中填写table
Foo.create id: 101, a_of_i: [1,2,3,4]
Foo.create id: 102, a_of_i: []
Foo.create id: 103, a_of_i: [11, 12, 13, 14, 15, 16]
Foo.create id: 104, a_of_i: [1, 2, 52, 53]
思考sql
SELECT
id,
CARDINALITY( a_of_i )
FROM
foos
有 AR
Foo.select('id, cardinality(a_of_i)').pluck('cardinality(a_of_i)', :id)
Returns
[[4, 101], [0, 102], [6, 103], [4, 104]]
给定 ActiveRecord 模型 Foo
,其字段 a_of_i
是整数数组:
# Foo:
id, a_of_i
101, [1,2,3,4]
102, []
103, [11, 12, 13, 14, 15, 16]
104, [1, 2, 52, 53]
是否有一个 ActiveRecord 查询将按数组列中#elements 的计数进行分组,例如 produce:
# Foo.some_query returns something like [[count, id], [count, id]...]
=> [ [6, 103], [4, 101], [4, 104], [0, 102] ]
# or perhaps, if easier:
=> { 6 => [103], 4 => [101,104], 0 => [102] }
剧透
Foo.select('id, cardinality(a_of_i)').pluck('cardinality(a_of_i)', :id)
创建 table
CREATE TABLE foos(
id text,
a_of_i integer[]
);
在ruby中填写table
Foo.create id: 101, a_of_i: [1,2,3,4]
Foo.create id: 102, a_of_i: []
Foo.create id: 103, a_of_i: [11, 12, 13, 14, 15, 16]
Foo.create id: 104, a_of_i: [1, 2, 52, 53]
思考sql
SELECT
id,
CARDINALITY( a_of_i )
FROM
foos
有 AR
Foo.select('id, cardinality(a_of_i)').pluck('cardinality(a_of_i)', :id)
Returns
[[4, 101], [0, 102], [6, 103], [4, 104]]