まず、関連するテーブルのデータベース スキーマを次に示します。
table: students
record_number | forename | surname
table: applications
id | record_number | job_id | status_id
テーブル内のrecord_number
フィールドは、applications
テーブルへの外部キーstudents
です。インターンシップを受け入れた学生と受け入れていない学生の数を示す棒グラフを APEX で生成する SQL を作成しようとしています。
学生の申請が承認された場合、status_id
フィールドは7
です。それ以外の場合は、承認されたアプリケーションがありません。ここに私がこれまでに持っているものがあります:
SELECT NULL AS link, 'Placed' AS label, COUNT(*) AS value
FROM tbl_students students
JOIN tbl_applications applications USING (record_number)
WHERE applications.status_id = 7
UNION
SELECT NULL AS link, 'Unplaced' AS label, CASE COUNT(*) AS value WHEN value > 1 THEN 1 END
FROM tbl_students students
JOIN tbl_applications applications USING (record_number)
WHERE applications.status_id != 7
問題は、1 人の学生が多くのインターンシップに参加でき、そのうちの 1 つしか一度に受け入れられないことです。これは、上記の最初のクエリでは問題ありません。ただし、学生は多くの未承諾のインターンシップを持つことができ、2 番目のクエリは 1 回だけではなくすべてをカウントします (+1 の学生が未承諾のインターンシップを持っていないことを示すため)。
受け入れられていないインターンシップの数をカウントするのではなく、受け入れられたインターンシップのない学生のみをカウントするようにクエリを調整するにはどうすればよいですか? ステートメントを試してみましたCASE
が、構文エラーがスローされます。
ありがとう。