Sql 连接和查询的问题

Sql 连接和查询的问题,sql,Sql,编辑:删除了我的旧邮件,因为它令人困惑。我现在还不能回答我自己的问题 发现,问题来自分组 经过一些研究,我发现我们不能将GROUPBY用于分组行中的列 因此,这项工作正如预期的那样: SELECT candidats.* , AVG(test_results.rate_good_answer) AS toto FROM "candidats" LEFT JOIN "sessiontests" ON "sessiontests"."candidat_id" = "candid

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

发现,问题来自分组

经过一些研究,我发现我们不能将GROUPBY用于分组行中的列

因此,这项工作正如预期的那样:

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
但这将仅对测试结果中的我的列进行分组:

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行,而我希望它为每个候选对象返回一行

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

选择候选人* ,平均测试结果。将良好答案评定为toto 来自候选人 左连接会话测试 在sessiontests.candidate_id=candidates.id上 左连接测试结果 在测试时,sessiontest\u id=sessiontests.id 左键联接问卷 关于问卷调查。id=测试结果。问卷调查 其中sessiontests.terminate='t' 以及类似“%java%”的.category 按候选人分组
按toto排序

您是否尝试过按candidates.id进行分组?您能否澄清您希望如何对结果进行排序,可能包括示例?通过平均值或任何其他聚合函数进行排序时,结果在其组内始终未排序,因为聚合函数在组内始终具有相同的值。还有,你在使用MySQL吗?刚刚试过,它使我的sqlite:p崩溃了。但我已经知道,这是行不通的。因为,如果要在ORDER BY中使用聚合函数,必须按此列分组@马克,现在我的问题解决了。我的问题真的让人困惑,所以我只添加了答案。我的第一个查询按预期工作。