ActiveRecord / Rails:计算多个查询结果的最有效方法

时间:2014-02-19 01:03:06

标签: ruby-on-rails ruby activerecord

我是ActiveRecord的新手。我正在尝试优化数据库查询。

我的Person模型有gender列。一个人的gender可以包含以下三个值之一:malefemaletransgendered。我想知道每个性别的人数。

我目前正在使用三个单独的数据库查询来执行此操作。

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

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

4 个答案:

答案 0 :(得分:2)

了解ActiveRecord :: Calculations。语法取决于您的Rails版本。

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

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

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

的哈希值

答案 1 :(得分: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

答案 2 :(得分:1)

您可以按查询进行分组以汇总所有数据:

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

然后您可以拆分值并分配给您的变量。

答案 3 :(得分:1)

你可以试试这个: Person.where(gender: [:male, :female, :transgendered]).count