我有三个SQL表。第一个是SCUBA_CLASSES,其属性为CLASSID和CLASSNAME。第二个是名为STUDENTS的表,其属性为STUDENTID和AGE。第三个是具有属性STUDENTID和COURSEID的表TAKES_CLASS。
如何创建一个新表格,显示该组中最年轻学生的CLASSID和CLASSNAME?
我有:
CREATE TABLE YOUNGEST_STUDENT_ENROLLMENT
SELECT SCUBA_CLASSES.CLASSID AS CLASSID, SCUBA_CLASSES.CLASSNAME AS CLASSNAME
FROM SCUBA_CLASSES, STUDENTS, TAKES_CLASS
WHERE MIN(STUDENTS.AGE)
不知道该怎么做。我必须找到最年轻的学生并输出他们注册的所有课程的CLASSID和CLASSNAME。
答案 0 :(得分:2)
看起来VIEW
比桌子更合适。新学生注册时,视图会自动更新;
CREATE VIEW YOUNGEST_STUDENT_ENROLLMENT AS
WITH cte AS (
SELECT SC.CLASSID, SC.CLASSNAME, S.NAME, S.AGE,
ROW_NUMBER() OVER (PARTITION BY SC.CLASSID ORDER BY AGE) RN
FROM SCUBA_CLASSES SC
JOIN TAKES_CLASS TC ON SC.CLASSID = TC.CLASSID
JOIN STUDENTS S ON S.STUDENTID = TC.STUDENTID
)
SELECT CLASSID,CLASSNAME,NAME,AGE FROM cte WHERE RN=1;
此视图将始终包含每个班级年龄最低的人。如果您希望它只包含最低年龄的人,无论哪个班级,您都可以删除PARTITION BY SC.CLASSID
条款。
答案 1 :(得分:0)
尝试这个嵌套查询: -
CREATE TABLE YOUNGEST_STUDENT_ENROLLMENT AS (
SELECT SCUBA_CLASSES.CLASSID AS CLASSID, SCUBA_CLASSES.CLASSNAME AS CLASSNAME
FROM SCUBA_CLASSES
WHERE SCUBA_CLASSES.CLASSID IN (SELECT TAKES_CLASS.CLASSID FROM TAKES_CLASS
WHERE TAKES_CLASS.STUDENTID IN (SELECT STUDENTS.STUDENTID FROM STUDENTS
WHERE STUDENTS.AGE IN (SELECT MIN(STUDENTS.AGE) as AGE FROM STUDENTS))));