Sql 查找最年轻的学生的姓名和年龄,这些学生要么是英语专业的学生,要么是注册参加Ivana Teach教授的课程的学生
模式如下:Sql 查找最年轻的学生的姓名和年龄,这些学生要么是英语专业的学生,要么是注册参加Ivana Teach教授的课程的学生,sql,Sql,模式如下: Student(snum: integer primary key, sname: varchar(40), major: varchar(40), level: varchar(40), age: integer) Faculty (fid: integer primary key, fname: varchar(40), deptid: integer) Class(name: varchar(40) primary key, meets at: varchar(40), r
Student(snum: integer primary key, sname: varchar(40), major: varchar(40), level: varchar(40), age: integer)
Faculty (fid: integer primary key, fname: varchar(40), deptid: integer)
Class(name: varchar(40) primary key, meets at: varchar(40), room: varchar(40), fid: integer references faculty)
Enrolled(snum: integer references student, cname: varchar(40) references Class(name))
inner join enrolled on enrolled.snum = student.snum
inner join class on enrolled.cname = class.name
inner join faculty on faculty.fid = class.fid
where (student.major = 'English' or faculty.fname='Ivana Teach')
我写的问题是:
select min(student.age),student.sname
from student
inner join enrolled
on enrolled.snum = student.snum or student.major = 'English'
inner join class
on enrolled.cname = class.name
inner join faculty
on faculty.fid = class.fid and faculty.fname='Ivana Teach'
group by student.age
having student.age=min(student.age);
这将给出一个输出:
最小(学生年龄)
斯奈姆
21
玛利亚·怀特
19
约瑟夫·汤普森
20
克里斯托弗·加西亚
17
丽莎·沃克
18
保罗·霍尔
按学生分组。年龄
将按年龄分组,即它将导致显示每个年龄组学生最低年龄的结果,这不是您想要的,因此应删除此部分
拥有student.age=min(student.age)
也是多余的。HAVING子句用于根据某些聚合条件进行筛选。例如,如果你想找到所有科目分数总和大于100的学生(完全合成),你可以按student.sname进行分组,使总和(student.scores)>100。同样,这不是您在特定查询中想要的,因此应该删除这一部分
关于你的内心连接:
inner join enrolled on enrolled.snum = student.snum or student.major = 'English'
inner join class on enrolled.cname = class.name
inner join faculty on faculty.fid = class.fid and faculty.fname='Ivana Teach'
要找到主修英语或就读于Ivana Teach教授课程的学生,您应使用WHERE子句,如下所示:
Student(snum: integer primary key, sname: varchar(40), major: varchar(40), level: varchar(40), age: integer)
Faculty (fid: integer primary key, fname: varchar(40), deptid: integer)
Class(name: varchar(40) primary key, meets at: varchar(40), room: varchar(40), fid: integer references faculty)
Enrolled(snum: integer references student, cname: varchar(40) references Class(name))
inner join enrolled on enrolled.snum = student.snum
inner join class on enrolled.cname = class.name
inner join faculty on faculty.fid = class.fid
where (student.major = 'English' or faculty.fname='Ivana Teach')
我删除了不一致的数据库标记。请仅使用您真正使用的数据库进行标记。不要重新添加这两个标记,Prakar,它们都是由于某种原因被删除的。只标记您真正使用的RDBMS。为什么我会得到这样一个答案,而正确的答案只有一个条目-好吧,要么您的查询中有一个错误,要么RDBMS中有一个错误..请共享一些示例数据并提及您使用的数据库名称。