【问题标题】:In Rails, how to group by count of elements in array field?在 Rails 中,如何按数组字段中的元素计数进行分组?
【发布时间】:2020-09-24 21:34:57
【问题描述】:

给定 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 的计数进行分组,例如产生:

# 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] }

【问题讨论】:

    标签: arrays ruby-on-rails activerecord


    【解决方案1】:

    剧透

    Foo.select('id, cardinality(a_of_i)').pluck('cardinality(a_of_i)', :id)
    

    创建表格

    CREATE TABLE foos(
      id   text,
      a_of_i integer[]
    );
    

    用 ruby​​ 填写表格

    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
    

    使用增强现实

    Foo.select('id, cardinality(a_of_i)').pluck('cardinality(a_of_i)', :id)
    

    返回

    [[4, 101], [0, 102], [6, 103], [4, 104]]
    

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2021-05-14
      相关资源
      最近更新 更多