首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在同一行上建立联接和自联接

如何在同一行上建立联接和自联接
EN

Stack Overflow用户
提问于 2015-11-17 19:43:10
回答 1查看 58关注 0票数 1

情况如下:

  1. Teacher PerformanceStudent Performance实体,所以老师和学生可以参加相同的课程有他们的分数。
  2. 教师可以教学生和老师。
  3. 有一个Teaching Relation表,是的,教师和学生都可以出现在出勤率栏中,但是只有教师可以出现在教师栏中。
  4. 所需的报告表是列出所有教师的表现,加上由教师授课的学生和教师的平均成绩。

在我们的系统中,id是数字的,我只是为了演示而将其命名。

教师绩效(Tb_tp)

代码语言:javascript
运行
复制
t_id       | score
------------------
 JOHN      | 5
 ASHLEY    | 6
 STEVEN    |4.5

学生表现(Tb_sp)

代码语言:javascript
运行
复制
      s_id | score
------------------
 SCOTT     | 5
 FRANK     | 8
 TIM       | 7

教学关系(Tb_tr)

代码语言:javascript
运行
复制
 t_id (teacher) | a_id for attendance id | a_type attendance type
------------------------------------------------------------------
 ASHLEY         | JOHN                   | teacher
 ASHLEY         | FRANK                  | student
 ASHLEY         | TIM                    | student
 JOHN           | ASHLEY                 | teacher
 JOHN           | FRANK                  | student

期望的报告:

代码语言:javascript
运行
复制
   t_id     | Score| avg_t  AVG score from Teacher | avg_s AVG score from Student
--------------------------------------------------------------------------
   ASHLEY   |   6  |     (5 from John) /1          | (8 from Frank + 7 from Tim)/2
--------------------------------------------------------------------------
   JOHN     |   5  |   (6 from ASHLEY) /1          | (8 from Frank) / 1

我们怎样才能做到这一点?我认为两个连接在一起或者合并两个查询,但是无论哪种方式都不能将结果保持在同一行并且是准确的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-17 19:55:40

我认为你想要的技术是两个外部连接和一个聚合。这是我未经测试的通行证:

代码语言:javascript
运行
复制
SELECT p.t_id, p.score, scores.avg_teacher_score, scores.avg_student_score
FROM teacher_performance p
JOIN (
  SELECT t_id, AVG( t.score) AS avg_teacher_score, AVG( s.score ) AS avg_student_score
  FROM teaching_relation tr
  LEFT JOIN teacher_performance t ON t.t_id = tr.a_id AND tr.a_type='teacher'
  LEFT JOIN student_performance s ON s.s_id = tr.a_id AND tr.a_type='student'
  ) scores
  ON scores.t_id = p.t_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33765647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档