【问题标题】:Sql Total Sum using no of row counts in a table使用表中没有行数的 Sql Total Sum
【发布时间】:2015-01-23 14:11:39
【问题描述】:

我正在尝试根据 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. 这会导致每个学生 ID 的总行数

    select MarksDetails.StudentId , COUNT(MarksDetails.StudentId ) as     count   from MarksDetails
    group by MarksDetails.StudentId
    
  2. 这会产生 Marks,带有 studentid 和 tagstypeid

    select  MarksType.Marks, MarksType.MarksTypeId , MarksDetails.StudentId   from MarksType inner join MarksDetails  on   MarksType.MarksTypeId =    MarksDetails.StudentId
    

我可以知道我做错了什么吗? 任何帮助都会很棒。

【问题讨论】:

  • 因为您将结果限制为 MarksDetailId=1。你为什么这样做?
  • 你也没有正确加入并且缺少第三张表
  • 你也需要有一个group by。
  • 我不认为LoayaltyPoints_T.MarksTypeId = MarksDetails.StudentId 这是平等的。
  • 如果我编辑它,你什么也学不到。您需要所有三个表才能正常工作吗?首先获取查询中的所有三个表,然后您只需要获取 MarksType 的总值。

标签: sql-server join count sum


【解决方案1】:

终于在 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

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多