LEFT JOIN
を使用する リレーションテーブルにデータがないことを確認するために、メインテーブルのレコードを保持できます。
問題 :
- 間違ったフィールド名 :
pr.interview_id = i.interview_id
、pr.interview_id = i.id
である必要がありますinterviews
にinterview_idフィールドがないため テーブルの場合、id
になります フィールド-クエリに基づきます。 -
pr.interview_id = i.id
where
条項 :participant_rating
の場合 テーブルには特定のインタビューのレコードがありません。これにより、結果セットからそのインタビューが削除されます。LEFT JOIN
を使用するparticipant_rating
の場合 テーブル。 -
sr.interview_id = i.id
where
条項 :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