我使用ruby mysql2 gem来处理数据库。我想在一个表中列出每个地区的所有国家/地区,然后将每个地区的点击数加起来。
通常我会使用mysql SUM
函数,但是gem会返回标题,所以这是不可能的。
相反,我得到每个地区的每个国家/地区的点击次数并将其加起来。 gem每个结果返回1个数组,我需要获得该结果并将其添加到每个区域的运行总计。
这是我的代码:
#!/usr/bin/ruby -w
# simple.rb - simple MySQL script using Ruby MySQL module
require "rubygems"
require "mysql2"
client = Mysql2::Client.new(:host => "localhost", :username => "root", :database => "cbscdn")
regions = client.query("select Id from Regions")
regions.each(:as => :array) do |rid|
hit = client.query("select hits from Countries where Regions_Id='#{rid}'")
hit.each(:as => :array) do |a|
a.map do |x|
x.to_i
end
end
end
如何实现每个区域的运行计数?
答案 0 :(得分:2)
让数据库完成工作:
client.query(%q{
select regions_id, sum(hits)
from countries
group by regions_id
}).each(:as => :array) do |row|
region_id, total_hits = row
#...
end
如果你想要countries
表中没有区域的总和:
client.query(%q{
select r.id, coalesce(sum(c.hits), 0)
from regions r
left outer join countries c
on r.id = c.regions_id
group by r.id
}).each(:as => :array) do |row|
region_id, total_hits = row
#...
end
答案 1 :(得分:0)
如果由于任何原因您不想将其委托给数据库引擎,您可以这样做: (为简单起见,我假设您的结果已经是数组)
regions_count = regions.inject({}) do |hash, rid|
hit = client.query("whatever")
hash[rid] = hit.map(&:to_i).inject(0, :+)
hash
end