2014-02-19 100 views
0

我是ActiveRecord的新手。我试图优化数据库查询。ActiveRecord/Rails:计算多个查询结果的最有效方法

我有一个Person模型与gender列。一个人的gender可以具有三个值之一:male,femaletransgendered。我想知道每个性别的人数。

我目前正在做这个与三个单独的数据库查询。

numMale = Person.where(:gender => :male).count 
numFemale = Person.where(:gender => :female).count 
numTrans = Person.where(:gender => :transgendered).count 

这些可以提高效率吗?有没有办法将它们组合成单个数据库调用?

回答

1

您可以通过查询做一组聚合所有数据:

Person.all(:group => "gender", :select => "gender, COUNT(*) as count") 

然后你就可以拆出来的价值观和分配给您的变量。

1
Person.select('gender,count(*)').where(:gender => [:male,:female,:transgendered]).group(:gender) 

将返回

SELECT gender,count(*) FROM `people` WHERE `people`.`gender` IN ('male', 'female', 'transgendered') GROUP BY gender 
+0

一个哈希我不认为你的'组by'计数应该做 – bjhaid

+0

一些RDBMS,如Oracle,计数不无GROUP BY工作 – emaillenin

2

查看ActiveRecord :: Calculations。语法取决于您的Rails版本。

# Rails 3.2 
Person.count(:group => :gender) 

# Rails 4 
Person.group(:gender).count 

count返回类似{ 'male' => 12, 'female' ... }

相关问题