QuestionAnswer の可能なスコアを計算するクエリを作成しています。クエリを実行すると、PSQLException が発生します。
モデルに関する情報
質問に正しく答える方法は複数あるため、QuestionAnswer は複数の (少なくとも 1 つの) questionAnswerPossibilities を持つことができます。
すべての questionAnswerPossibility には複数の questionAnswerParts があります。以下のクエリでは、questionAnswerPossibility ごとにスコアをクエリします。
問題のあるクエリ
クエリ自体は SQL を生成しますが、SQL は実行できません
def queryMogelijkePuntenByVragenViaOpenVragen()(implicit session: Session) = {
(for{
ovam <- OpenVraagAntwoordMogelijkheden //questionAnswerPossibilites
ovad <- OpenVraagAntwoordOnderdelen if ovad.ovamId === ovam.id //questionAnswerParts
ova <- OpenVraagAntwoorden if ovam.ovaId === ova.id //questionAnswers
} yield ((ova, ovam), ovad.punten))
.groupBy{ case ((ova, ovam), punten) => (ova, ovam)}
.map{ case ((ova, ovam), query) => (ova, ovam, query.map(_._2).sum)}
}
ここで生成された SQL (postgreSQL)
select x2."id", x2."vraag_id", x3."id", x3."volgorde", x3."ova_id", sum(x4."punten")
from "open_vraag_antwoord_mogelijkheden" x3, "open_vraag_antwoord_onderdelen" x4, "open_vraag_antwoorden" x2
where (x4."ovam_id" = x3."id") and (x3."ova_id" = x2."id")
group by (x2."id", x2."vraag_id"), (x3."id", x3."volgorde", x3."ova_id")
問題は、SQL を実行できないことです。次のエラーが表示されます。
play.api.Application$$anon$1:
Execution exception[[
PSQLException: ERROR: column "x2.id" must appear in the GROUP BY clause or be used in an aggregate function
Position: 8]]
生成された SQL に括弧が多すぎます。SQL の最後の部分は
group by x2."id", x2."vraag_id", x3."id", x3."volgorde", x3."ova_id"
ただし、スリックは括弧で生成しますが、ここで何か間違っていますか? それともこれはバグですか?