select子句中的ActiveRecord子查询

时间:2012-01-24 00:10:24

标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord subquery

所以我得到了一堆志愿者记录,有一些过滤和排序,这很好。但我还要计算每个志愿者帮助的孩子数量(使用儿童表上的volunteer_id),作为select子句中的子查询,以避免对每条记录执行单独的查询。作为奖励,能够按此计数排序也是一件好事!

我想最终得到这样的生成查询,并且能够访问“儿童”栏目:

SELECT id, name, (SELECT COUNT(*) FROM children WHERE volunteer_id = volunteers.id) AS kids FROM volunteers

Arel有没有办法做到这一点?我有一个侦察员,还没有找到任何东西。

或者,是否可以加入子表并获取:count(children.id)?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

使用SQL执行此操作的正确方法是使用GROUP BY子句:

SELECT v.id, v.name, COUNT(*) AS kids
FROM volunteers v
LEFT OUTER JOIN children c ON v.id = c.volunteer_id
GROUP BY v.id, v.name

AR中有一个方法.group()用于使用GROUP BY查询。