0

我得到了一个大学校友的 Access 数据库。它包含每个学生去过的学校的详细信息,特别是这些学校是公立学校还是收费学校。以下是相关表结构的简化版本:

StudentID AgeStart AgeFinish State_Fee
-------------------------------------------------- ---------
23 5 10 状态
23 10 18 状态
24 6 9 状态
24 9 12 费用
24 12 18 费用

主键是 StudentID+AgeStart,因此相同学生的记录存储在多行中,例如 23 岁以上的学生就读于两所学校,均为公立学校。24 名学生就读于三所学校,其中一所公立学校和两所付费学校。

我需要问一个问题:有多少人在私立/付费教育中度过了整个学业?是否可以在 SQL 中选择这些人?我很挣扎,因为学生来自世界各地,在不同年龄开始和结束学校。我需要能够说“为所有出现此 ID 的情况选择 State_paid=2 的 StudentID”。有人有什么想法吗?

4

2 回答 2

1

这将找到所有从未上过公立学校的学生。

SELECT DISTINCT StudentID FROM alumni
WHERE StudentID NOT IN (
    SELECT StudentID FROM alumni WHERE State_Fee = 'state'
)
于 2013-11-03T22:41:03.807 回答
1

回答这个问题的另一种方法是使用带有having子句的聚合。我更喜欢这种方法,因为它对于这些类型的查询更通用。(这是集合中集合查询的示例。)

select StudentId
from t
group by StudentId
having sum(iif(State_Fee = "state", 1, 0) = 0;

having子句所做的是计算"state"每个StudentId. StudentId当没有这样的记录时,A通过了测试。

于 2013-11-03T23:40:49.780 回答