【问题标题】:SQL using group_by to count usersSQL 使用 group_by 统计用户
【发布时间】:2021-01-07 06:55:46
【问题描述】:
users = [
        {"id":1, "zipcode":"10031"},
        {"id":4, "zipcode":"10000"},
        {"id":2, "zipcode":"10031"},
        {"id":3, "zipcode":"10031"}
      ]

大家好。我需要帮助来减少我的代码过程。 我有一个用户存储的数据。 我想在我的第一行代码中实现这一点

  [
    {"id":1, "zipcode":"10000", "users_count": 1}, 
    {"id":2, "zipcode":"10031", "users_count": 3},
  ]

我的代码:

user = User.select(:zipcode).group(:zipcode).count(:id)

上面代码的结果是{"10000"=>1, "10031"=>3}

  • 所以我需要分离键和值
  keys = user.keys
  values = user.values
  • 做一个循环
i = 0
num = keys.length.to_i
zipcodes = []
while i < num do
  zipcode = keys[i]
  users_count = values[i]
  zipcodes[i]= zipcode , users_count
  i +=1
end

如果上面的代码是[[10000, 1], [10031, 3]]的结果

如果这段代码我想改变结果 user = User.select(:zipcode).group(:zipcode).count(:id)

从此 {"10000"=&gt;1, "10031"=&gt;3}

到这个 [{"id":1, "zipcode":"10000", "users_count": 1},{"id":2, "zipcode":"10031", "users_count": 3}]

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby rails-activerecord


    【解决方案1】:

    您可以这样修改您的查询,

    user_counts = User.select(:zipcode, 'count(*) as user_count').group(:zipcode)
    

    请注意,在控制台打印的结果中,user_count 不会显示,因为它不是用户模型的属性。但是它就在那里,并且可以通过以下方式访问,

    user_counts.each do |user_count|
      puts user_count.zip_code
      puts user_count['user_count']
    end
    

    您还可以通过将结果转换为 JSON 来查看所有结果

    user_counts = User.select(:zipcode, 'count(*) as user_count').group(:zipcode)
    puts user_counts.as_json
    

    【讨论】:

    • 也可以在分组后调用.count,并返回包含邮政编码和数量的哈希
    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2011-10-16
    相关资源
    最近更新 更多