Sql Total Sum使用表中的行计数

时间:2015-01-23 14:11:39

标签: sql-server join count sum

我正在尝试根据StudentId和MarksTypeId行数找到每个学生的总分。

我有3张桌子

MarksType

----------------------------------
MarksTypeId |  MarkType    | Marks   
----------------------------------
1           |    Writing   | 10        
2           |    Drawing   | 30        
3           |    Singing   | 20    
----------------------------------     

Students

--------------------------------
StudentId |  Name    | Address
--------------------------------
1         |    John  | USA     
2         |    Raja  | India       
3         |    Paul  | AUS     
--------------------------------   

MarksDetails      --  Has two foreign keys

-------------------------------------------------------   
MarksDetailsId |  MarksTypeId    |  StudentId | Date
-------------------------------------------------------
1              |    3            | 1          | 18 jan
2              |    3            | 1          | 18 jan
3              |    1            | 3          | 19 jan
-------------------------------------------------------

这是我想要的结果:

------------------------------------
StudentId |  Name     | Total Marks
------------------------------------
1         |    John   | 40     
2         |    Raja   | 0      
3         |    Paul   | 10     
------------------------------------

我的意思是如果约翰每天唱两次,所以使用StudentId和MarksTypeId,我需要他的总标记作为结果。

到目前为止,我做了以下事情:

select  Sum(MarksType.Marks)  from MarksType inner join MarksDetails    on   MarksType.MarksTypeId=1

但总和返回错误的总数,

更新的其他尝试:

  1. 这会导致每个studentntid的总行数

    select MarksDetails.StudentId , COUNT(MarksDetails.StudentId ) as     count   from MarksDetails
    group by MarksDetails.StudentId
    
  2. 此结果标记为具有studentid和markstypeid

    select  MarksType.Marks, MarksType.MarksTypeId , MarksDetails.StudentId   from MarksType inner join MarksDetails  on   MarksType.MarksTypeId =    MarksDetails.StudentId
    
  3. 我可能知道自己做错了什么。 任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

最后得到了sql开发人员的善意指导,并在制作了一些research之后,这里是一个具有所需结果的查询,可能对某人有用,尽情享受!

SELECT Student.StudentId, Student.Name, sum(MarksType.Marks) as TotalMarks
FROM
 MarksType
INNER JOIN
 MarksDetails on MarksType.MarksTypeId = MarksDetails.MarksTypeId
INNER  JOIN 
 Student on Student.StudentId =  MarksDetails.StudentId

 group by Student.Name,Student.StudentId