ruby-on-rails - SQL 使用 group_by 统计用户
问题描述
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"=>1, "10031"=>3}
对此
[{"id":1, "zipcode":"10000", "users_count": 1},{"id":2, "zipcode":"10031", "users_count": 3}]
感谢您的任何帮助。
解决方案
您可以这样修改您的查询,
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
推荐阅读
- sql-server - 为什么 SELECT @@VERSION 在安装新的 SQL Server 后返回以前的版本
- python - 使用循环增加字符串中包含的数值(Python)
- sql - 为什么我不能在excel中双重加入查询
- c# - 覆盖 WPF 中的工具提示
- android - (可变)在 UI 上未观察到 LiveData
- c# - Azure 函数异常 - 将日志写入表存储时出错:Microsoft.Azure.Cosmos.Table.StorageException
- javascript - 如何使文本自动出现在搜索栏中?
- python - ModuleNotFoundError: No module named 'PIL' ,在处理上述异常的过程中,又发生了一个异常:
- c - 检查不相关进程的退出代码
- reactjs - Next.js 和 next.config.js 中的多个 module.exports 选项