Ruby on rails 内部联接上的Rails ActiveRecord子查询
我正在努力使用Rails的ActiveRecord查询接口来复制具有内部联接子查询的查询。我将如何复制以下内容:Ruby on rails 内部联接上的Rails ActiveRecord子查询,ruby-on-rails,activerecord,subquery,Ruby On Rails,Activerecord,Subquery,我正在努力使用Rails的ActiveRecord查询接口来复制具有内部联接子查询的查询。我将如何复制以下内容: SELECT ass.name, COUNT(DISTINCT a.question_id) AS answered_questions, tq.total_questions FROM assessments AS ass INNER JOIN (SELECT ass.id, COUNT(q.id) AS total_questions FROM
SELECT ass.name, COUNT(DISTINCT a.question_id) AS
answered_questions, tq.total_questions
FROM assessments AS ass
INNER JOIN (SELECT ass.id, COUNT(q.id) AS total_questions FROM
questions AS q INNER JOIN assessments AS ass ON ass.id=q.assessment_id
GROUP BY
ass.id) as tq ON tq.id=ass.id
INNER JOIN questions AS q ON q.assessment_id=ass.id
INNER JOIN answers AS a ON a.assessment_id=ass.id AND a.question_id=q.id
INNER JOIN org_assesments AS oa ON ass.id=oa.assessment_id
INNER JOIN users AS u ON oa.org_id=u.org_id AND
a.user_id=u.id
WHERE u.id=1
GROUP BY ass.name, tq.total_questions
ORDER BY ass.created_at DESC
LIMIT 10
我似乎无法使用查询生成器将其用于子查询。在没有子查询的情况下,我有这样一个功能,它可以为我提供评估标题和回答的问题数量:
Question.joins(:assessment => {:org_assessments => {:org => :users}}).joins(:answers)
.where(answers:{:user_id => params[:id]})
.distinct('answers.question_id').group(['assessments.name']).count()
如何编写此命令以将子查询包含在上面的原始SQL中?您可以将子查询作为字符串发送到
连接方法:
subquery =
TotalQuestion.
joins(:assessments).
group('assessments.id').
select('assessments.id, COUNT(q.id) as total_questions').to_sql
Question.joins("(#{sub_query}) as tq on tq.id=ass.id")
您可以将其与查询的其他部分组合:
Question.
joins(:assessment => {:org_assessments => {:org => :users}}).joins(:answers).
joins("(#{sub_query}) as tq on tq.id=ass.id").
where(answers:{:user_id => params[:id]}).
distinct('answers.question_id').group(['assessments.name']).count()
这不应该从评估。加入开始吗?
?这是否有效评估。通过sql(“上面的查询”)查找?
?我认为你应该查询评估而不是问题,比如:->评估。加入(:问题,:答案,组织评估::用户)。其中(用户:{id:1})。不同('answers.question\u id')。组(['Assessment.name')。顺序('assessments.created_at DESC').count()