0

我正在尝试按商业周获取电话数量。我已经写了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,.....}

有没有办法消除第一个查询产生的重复?

4

1 回答 1

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对象,但至少它们不会有重复的数据。

于 2012-10-01T13:32:12.323 回答