繁体   English   中英

多个连接显示学生课程名称

[英]Multiple joins display student course name

我有以下设置,它运行良好。 我很难弄清楚如何在 output 中显示课程名称的语法。 在我的测试案例中,所有行都应该具有几何值。

此外,如何使用 rank 或 rank_dense 来限制 output 仅显示平均最高的 1 行?

CREATE TABLE students(student_id, first_name,  last_name) AS
    SELECT 1, 'Faith', 'Aaron'  FROM dual UNION ALL
    SELECT 2,  'Lisa',  'Saladino' FROM dual UNION ALL
    SELECT 3,  'Leslee',  'Altman'   FROM dual UNION ALL
    SELECT 4, 'Patty',  'Kern'    FROM dual UNION ALL
    SELECT 5,  'Betty',  'Bowers'    FROM dual;

CREATE TABLE courses(course_id, course_name) AS
    SELECT 1, 'Geometry' FROM dual UNION ALL
    SELECT 2, 'Trigonometry' FROM dual UNION ALL
    SELECT 3, 'Calculus' FROM DUAL;

CREATE TABLE grades(student_id,
course_id, grade) AS
SELECT 1, 1, 75 FROM dual UNION ALL
SELECT 1, 1, 81 FROM dual UNION ALL
SELECT 1, 1, 76 FROM dual UNION ALL
SELECT 2, 1, 100 FROM dual UNION ALL
SELECT 2, 1, 95 FROM dual UNION ALL
SELECT 2, 1, 96 FROM dual UNION ALL
SELECT 3, 1, 80 FROM dual UNION ALL
SELECT 3, 1, 85 FROM dual UNION ALL
SELECT 3, 1, 86 FROM dual UNION ALL
SELECT 4, 1, 88 FROM dual UNION ALL
SELECT 4, 1, 85 FROM dual UNION ALL
SELECT 4, 1, 91 FROM dual UNION ALL
SELECT 5, 1, 98 FROM dual UNION ALL
SELECT 5, 1, 74 FROM dual UNION ALL
SELECT 5, 1, 81 FROM dual;

/* average grade of each student */

select s.student_id
    , s.first_name 
    , s.last_name
    , round(avg(g.grade), 1) as student_avg
from students s 
     join grades g
         on s.student_id = g.student_id
group by s.student_id, s.first_name, s.last_name
ORDER BY avg(g.grade) DESC;

像这样的东西?

SQL> with temp as
  2    (select s.student_id
  3          , s.first_name
  4          , s.last_name
  5          , c.course_name
  6          , round(avg(g.grade), 1) as student_avg
  7          , rank() over (order by avg(g.grade) desc) rnk
  8     from students s join grades g  on s.student_id = g.student_id
  9                     join courses c on c.course_id  = g.course_id
 10     group by s.student_id, s.first_name, s.last_name, c.course_name
 11    )
 12  select student_id, first_name, last_name, course_name, student_avg
 13  from temp
 14  where rnk <= 3
 15  order by rnk;

STUDENT_ID FIRST_ LAST_NAM COURSE_NAME  STUDENT_AVG
---------- ------ -------- ------------ -----------
         2 Lisa   Saladino Geometry              97
         4 Patty  Kern     Geometry              88
         5 Betty  Bowers   Geometry            84.3

SQL>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM