我正试图通过商业周获得通话次数。我写过sql:
select strftime('%W', date_time_origination) as week, count(*)
from calls
group by week;
然后我尝试在rails中运行它,首先使用它:
calls_by_week = Call.select("strftime('%W',date_time_origination) as week, count(*) as total_number_of_calls").group("week")
这返回了一组具有正确数据的对象,但重复多次(json表示):
[{ "total_number_of_calls": 5435, "week": 39 },.....]
鉴于它应该返回一个对象,我尝试更改rails查询结构:
calls_by_week = Call.select("strftime('%W', date_time_origination) as week").group("strftime('%W', date_time_origination)").count
这一次,查询返回一个哈希,减去命名的参数:
{ "31": 3123, "32": 1231,... }
我希望json中的数据如下所示:
{ "week": 31, "total_number_of_calls": 12412,.....}
有没有办法消除第一个查询产生的重复?
答案 0 :(得分:0)
首先:如果您使用Call.select(...)
rails将尝试实例化Call
个对象。你想要的不是Call
对象,只是哈希。您可以使用Call.connection.execute("SELECT .... blah blah").to_enum.to_a
并使用生成的数组数组。
但是要将结果转换为哈希表单,请使用
returned_hash = { "31": 3123, "32": 1231,... }
what_you_want = returned_hash.collect do |k,v|
{"week" => k.to_i, "total_number_of_calls" => v.to_i}
end
另一种方法是使用.uniq
应用于查询,它仍然会构建Call
个对象,但至少它们不会有重复的数据。