我想存储以下查询的查询结果
"SELECT sum( CASE WHEN properties like '%abcd%' THEN 1 ELSE 0 END) 'abcd',
sum( CASE WHEN properties like '%gef%' THEN 1 ELSE 0 END) 'gef',
sum( CASE WHEN properties like '%hij%' THEN 1 ELSE 0 END) 'hij',
sum( CASE WHEN properties like '%lmn%' THEN 1 ELSE 0 END) 'lmn' from events"
作为表单中的JSON
{'abcd': 1, 'gef' : 2, 'hij' : 1, 'lmn' : 3}
在Rails中。
我使用的count_result = ActiveRecord::Base.connection.execute(sql)
只返回值,而不是键。
我以[1,2,1,3]格式得到结果。
如何获取键值并将它们存储为json格式?
答案 0 :(得分:1)
使用ActiveRecord::Base.connection.exec_query
获取可以转换为哈希的ActiveRecord::Result
对象:
result = ActiveRecord::Base.connection.exec_query("SELECT sum( CASE WHEN properties like '%abcd%' THEN 1 ELSE 0 END) 'abcd',
sum( CASE WHEN properties like '%gef%' THEN 1 ELSE 0 END) 'gef',
sum( CASE WHEN properties like '%hij%' THEN 1 ELSE 0 END) 'hij',
sum( CASE WHEN properties like '%lmn%' THEN 1 ELSE 0 END) 'lmn' from events")
result.to_h # => { 'abcd' => 1, 'hij' => 0 ... }
要将值转换为JSON字符串,只需在哈希上调用.to_json
即可。但是,如果您使用的是本机JSON列类型,则无需手动转换它。