编辑:删除了我的旧邮件,因为它令人困惑。我现在无法回答我自己的问题。
发现,问题来自GROUP BY。
经过一些研究,我发现我们不能将GROUP BY用于分组行内的一组列。
所以这项工作符合预期:
SELECT candidats.*
, AVG(test_results.rate_good_answer) AS toto
FROM "candidats"
LEFT JOIN "sessiontests"
ON "sessiontests"."candidat_id" = "candidats"."id"
LEFT JOIN "test_results"
ON "test_results"."sessiontest_id" = "sessiontests"."id"
LEFT JOIN "questionnaires"
ON "questionnaires"."id" = "test_results"."questionnaire_id"
WHERE (sessiontests.terminate = 't' )
AND ("questionnaires"."category" LIKE '%java%' )
GROUP BY candidats.id
ORDER BY toto
但是这只会在test_results中对我的列进行分组:
SELECT candidats.*,
FROM "candidats"
LEFT JOIN "sessiontests"
ON "sessiontests"."candidat_id" = "candidats"."id"
LEFT JOIN "test_results"
ON "test_results"."sessiontest_id" = "sessiontests"."id"
LEFT JOIN "questionnaires"
ON "questionnaires"."id" = "test_results"."questionnaire_id"
WHERE (sessiontests.terminate = 't' )
AND ("questionnaires"."category" LIKE '%java%' )
GROUP BY candidats.id, test_results.rate_good_answer
ORDER BY AVG(test_results.rate_good_answer)
编辑3:
我的问题是第二个查询是为我的候选人返回每个不同的test_results行,而我预计它会给每个候选人返回一行。
第一个查询,是答案,而且效果很好。
答案 0 :(得分:0)
SELECT候选人。*
,AVG(test_results.rate_good_answer)AS toto
来自“候选人”
LEFT JOIN“sessiontests”
关于“sessiontests”。“candidat_id”=“候选人”。“id”
LEFT JOIN“test_results”
ON“test_results”。“sessiontest_id”=“sessiontests”。“id”
LEFT JOIN“问卷调查”
关于“问卷”。“id”=“test_results”。“questionnaire_id”
WHERE(sessiontests.terminate ='t')
AND(“问卷”。“类别”LIKE'%java%')
GROUP BY candidats.id
ORDER BY toto