LEFT JOINを使用する リレーションテーブルにデータがないことを確認するために、メインテーブルのレコードを保持できます。
問題 :
- 間違ったフィールド名 :
pr.interview_id = i.interview_id、pr.interview_id = i.idである必要がありますinterviewsにinterview_idフィールドがないため テーブルの場合、idになります フィールド-クエリに基づきます。 -
pr.interview_id = i.idwhere条項 :participant_ratingの場合 テーブルには特定のインタビューのレコードがありません。これにより、結果セットからそのインタビューが削除されます。LEFT JOINを使用するparticipant_ratingの場合 テーブル。 -
sr.interview_id = i.idwhere条項 :system_ratingの場合 テーブルには特定のインタビューのレコードがありません。これにより、結果セットからそのインタビューが削除されます。LEFT JOINを使用するsystem_ratingの場合 テーブルも。 Usage of AVG動作しますが、SUM, COUNTなどの他の集計関数では動作しません .. 1対多の関係がある場合、結合すると同じ行に複数のレコードが存在するためです。
解決策 :
SELECT
i.id AS interview_id,
i.candidate,
AVG(sr.rating) AS system_rating,
AVG(CASE WHEN pr.rater_type = 'Candidate' THEN pr.rating END) AS candidate_rating,
AVG(CASE WHEN pr.rater_type = 'Recruiter' THEN pr.rating END) AS recruiter_rating
FROM interviews i
LEFT JOIN system_rating sr ON sr.interview_id = i.id
LEFT JOIN participant_rating pr ON pr.interview_id = i.id
-- WHERE i.id IN (1, 2, 3) -- use whenever required
GROUP BY i.id