连接和查询的问题

时间:2011-10-19 07:45:31

标签: sql

编辑:删除了我的旧邮件,因为它令人困惑。我现在无法回答我自己的问题。

发现,问题来自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行,而我预计它会给每个候选人返回一行。

第一个查询,是答案,而且效果很好。

1 个答案:

答案 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