学生
ID FName Lname Status Major Code GPA Admitted Date
104 Donald Nento Sophomore 105 2.64 1-Jul-2015
部门
Dept Code Dept Name College
105 Mathematics AS
这些是上面的表格......我被困在两个问题上:
有人可以解决一些问题吗?
答案 0 :(得分:0)
以下是一些建议的查询。如果字段名称不匹配,您需要对其进行调整。如果你使用双引号,名称区分大小写,但如果你有空格,那么你需要使用双引号:
列出GPA最高的学生。
SELECT d."Dept Name"
FROM Departments d
INNER JOIN Students s
ON d."Dept Code" = s."Major Code"
WHERE s.GPA = (SELECT MAX(GPA) FROM Students);
或者,如果您不允许使用INNER JOIN
,那么:
SELECT d."Dept Name"
FROM Departments d,
Students s
WHERE d."Dept Code" = s."Major Code"
AND s.GPA = (SELECT MAX(GPA) FROM Students);
列出每个学生入学后经过的天数。
SELECT s.*,
TRUNC(SYSDATE) - s.Admitted_Date AS days_since_admission
FROM Students s
答案 1 :(得分:0)
列出GPA最高的学生。
您可以在不使用相关子查询的情况下获得所有具有最高GPA的大学:
SELECT College
FROM (
SELECT College,
RANK() OVER ( ORDER BY GPA DESC ) AS gpa_rank
FROM Students s
INNER JOIN
Departments d
ON ( s."Major Code" = d."Dept Code" )
)
WHERE gpa_rank = 1;
列出每个学生入学后经过的天数。
SELECT ID,
FNAME,
LNAME,
FLOOR( SYSDATE - "Admitted Date" ) AS days_since_admission
FROM students;
您可以使用TRUNC(SYSDATE) - "Admitted Date"
,但如果录取的日期有时间成分,那么它不会是一个整数。
(注意:目前还不清楚你的列名实际上是什么。你的数据显示它们区分大小写并带有空格但是这很不寻常,因为更常见的是使用带下划线而不是空格的不区分大小写的列名。我已使用""
来匹配帖子中使用的列名,但请将名称调整为实际值。)