oracle

时间:2016-03-15 22:03:55

标签: sql oracle

学生

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

这些是上面的表格......我被困在两个问题上:

  1. 列出GPA最高的学生。
  2. 列出每名学生入学后的天数。
  3. 有人可以解决一些问题吗?

2 个答案:

答案 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",但如果录取的日期有时间成分,那么它不会是一个整数。

(注意:目前还不清楚你的列名实际上是什么。你的数据显示它们区分大小写并带有空格但是这很不寻常,因为更常见的是使用带下划线而不是空格的不区分大小写的列名。我已使用""来匹配帖子中使用的列名,但请将名称调整为实际值。)