所以我得到了一堆志愿者记录,有一些过滤和排序,这很好。但我还要计算每个志愿者帮助的孩子数量(使用儿童表上的volunteer_id),作为select子句中的子查询,以避免对每条记录执行单独的查询。作为奖励,能够按此计数排序也是一件好事!
我想最终得到这样的生成查询,并且能够访问“儿童”栏目:
SELECT id, name, (SELECT COUNT(*) FROM children WHERE volunteer_id = volunteers.id) AS kids FROM volunteers
Arel有没有办法做到这一点?我有一个侦察员,还没有找到任何东西。
或者,是否可以加入子表并获取:count(children.id)?
感谢您的帮助:)
答案 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查询。