首先,这是我的相关表格的数据库架构:
table: students
record_number | forename | surname
table: applications
id | record_number | job_id | status_id
record_number
表中的applications
字段是students
表的外键。我正在尝试编写一些SQL来生成APEX中的条形图,其中显示了接受实习的学生人数和不接受实习的学生人数。
如果学生有已接受的申请,则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学生没有未经接受的实习)。
我怎样才能使查询适应只计算一次没有被接受的内部学生的学生,而不是将他们计算到他们有多少无法接受的实习?我尝试使用CASE
语句,但它会引发语法错误。
感谢。
答案 0 :(得分:0)
听起来你会希望第二个查询是这样的
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
表的主键,我希望能够为您提供至少有一个未被接受的实习的学生人数。
如果该查询没有产生您要查找的结果,那么如果您可以发布一些样本数据和预期输出将会很有帮助。