我是ActiveRecord的新手。我正在尝试优化数据库查询。
我的Person
模型有gender
列。一个人的gender
可以包含以下三个值之一:male
,female
或transgendered
。我想知道每个性别的人数。
我目前正在使用三个单独的数据库查询来执行此操作。
numMale = Person.where(:gender => :male).count
numFemale = Person.where(:gender => :female).count
numTrans = Person.where(:gender => :transgendered).count
这些可以提高效率吗?有没有办法将它们组合成一个数据库调用?
答案 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