0

まず、関連するテーブルのデータベース スキーマを次に示します。

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が、構文エラーがスローされます。

ありがとう。

4

1 に答える 1

0

2番目のクエリを次のようにしたいようです

SELECT NULL AS link, 'Unplaced' AS label, COUNT(DISTINCT students.record_number) AS value
  FROM tbl_students students
       JOIN tbl_applications applications USING (record_number)
 WHERE applications.status_id != 7

これにより、個別のstudents.record_number値の数がカウントされます。これがテーブルの主キーであるため、students受け入れられていないインターンシップを少なくとも 1 回受けている学生の数がわかると思います。

そのクエリで探している結果が得られない場合は、サンプル データと予想される出力を投稿していただけると助かります。

于 2012-12-05T22:44:59.377 に答える