根据来自其他表的联接获取列数

时间:2018-10-05 01:27:32

标签: mysql sql join jointable

我是SQL新手。我必须进入表并尝试从表1中获取列数,然后通过表2中的其他列进行连接。

表1:

credits | sec_code | student_acc_id
--------------------------------
4            TUB        2098
5            JIY        2099
6            THG        3011

表2:

id| sec_code | student_acc_id | stu_id
-------------------------------------
1      TUB        2098          1011
5      JIY        2099          1011
7      THG        3011          1012

我想通过从sec_code中从table2中获取stu_id来获得学生的学分总和,并为stuId获取所有student_acc_id,并对从表2中找到的所有学生账户ID的总和中table1中的学分列。不知道如何加入或简化此查询。

通常我的方法是将这两个到三个不同的SQL语句包括在内,但如果可能的话,我会在一个sql查询中寻找它。

对于上述示例,我想从第二个表中获取所有student_id为1011的student_acc_id的学分总和。我只有第一张桌子。因此输出应为4 + 5,因为两个帐户都属于同一学生。

所以我需要: ->从表2中获取基于sec_code的stu_id(对于TUB sec_code可以说) ->从表中获取所有student_acc_id,其中stu_id是上述语句的结果 ->现在使用所有student_acc_id的总和计入表1中的学分

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试如下

  select t2.stu_id, 
  sum(t1.credits) 
  from t1 join t2 on t1.student_acc_id=t2.student_acc_id and
  t1.sec_code=t2.sec_code
  group by stu_id
  Having count(stu_id)>1

答案 1 :(得分:0)

根据您的数据使用联接存在。 但是根据示例数据,最好从Right表中获取数据。


select
    tab2.stud_id,
    SUM(tab1.credits) AS credit_sum
from
    table1 as tab1
    right join
        table2 as tab2
    on  tab1.student_acc_id = tab2.student_acc_id
    and tab1.sec_cd = tab2.sec_cd
where
    tab2.stud_id in(
        select distinct stud_id
        from table2
        where student_acc_id = '2098'
    )
group by
    tab2.stud_id;

您可以在此处检查其示例输出。请click获取小提琴解决方案。