当前位置: 首页 > 知识库问答 >
问题:

如何编写这个复杂的SQL语句

云凌
2023-03-14

我的MySQL表中有三个相同的表,即

第一项结果、第二项结果和第三项结果

这是其中的列

exam_type_id | student_id  | subject_id  | mark  |

或使用虚拟数据的示例

注:每个科目有三种不同的考试类型(CA1、CA2、CA3和考试),有三个类似的表格,内容相同,但数据不同,因为它包含第一学期的数据,第二学期的数据,第三学期的数据。

first_term_result:

exam_type_id | student_id  | subject_id  | mark  |
    1        |    6        |     7       | 12    |
    2        |    6        |     7       | 9     |
    3        |    6        |     7       | 13    |   
    4        |    6        |     7       | 45    |
    1        |    4        |     7       | 7     |
    2        |    4        |     7       | 5     |
    3        |    4        |     7       | 10    |   
    4        |    4        |     7       | 34    |

second_term_result:

exam_type_id | student_id  | subject_id  | mark  |
    1        |    6        |     7       | 15    |
    2        |    6        |     7       | 6     |
    3        |    6        |     7       | 10    |   
    4        |    6        |     7       | 50    |
    1        |    4        |     7       | 6     |
    2        |    4        |     7       | 3     |
    3        |    4        |     7       | 9     |   
    4        |    4        |     7       | 44    |


third_term_result:

exam_type_id | student_id  | subject_id  | mark  |
    1        |    6        |     7       | 17    |
    2        |    6        |     7       | 8     |
    3        |    6        |     7       | 15    |   
    4        |    6        |     7       | 67    |
    1        |    4        |     7       | 12    |
    2        |    4        |     7       | 8     |
    3        |    4        |     7       | 12    |   
    4        |    4        |     7       | 50    |

现在我想得到的是first\u term\u结果的SUM()。标记第二项结果。标记第三项结果。按学生姓名标记每个学生的,其中科目id=7组。

另一个非常重要的问题是,我将计算第一学期第二学期第三学期每个学生的总金额,并且希望能够订购该学生和DESC中的科目的总金额,以便我可以相应地定位他们。如果php更容易,请让我知道。

谢谢

对我来说,这似乎很复杂,但我知道这里有大师可以实现这一点,我在某个地方读到,即使使用了汇总,也可以订购。

下面是我的代码,显然不起作用。

SELECT CONCAT(s.fname,' ',s.mname,' ',s.lname) AS sname, 
SUM(f.mark) AS first_total, 
SUM(se.mark) AS second_total, 
SUM(t.mark) AS third_total 
SUM(f.first_total,second.total,third_total) as GT // just to show my intention 
FROM students s, first_term_result f, second_term_result se, third_term_result t 
WHERE s.studentID=f.student_id AND
s.studentID=se.student_id AND
s.studentID=t.student_id AND
f.subject_id=7 AND
se.subject_id=7 AND
t.subject_id=7
GROUP BY sname ORDER BY GT DESC

共有1个答案

盖夕
2023-03-14
SELECT CONCAT(MS.fname,' ',MS.mname,' ',MS.lname) AS sname, 
  M.FTotal, M.STotal, M.TTotal, 
  (M.FTotal + M.STotal + M.TTotal) AS GrandTotal
FROM (
  SELECT st.studentID, 
     (
       SELECT SUM(f.mark) 
       FROM first_term_result AS f 
       WHERE f.subject_id = 7 
       AND f.student_id = st.studentID
     ) AS FTotal, 
     (
       SELECT SUM(s.mark) 
       FROM second_term_result AS s 
       WHERE s.subject_id = 7 
       AND s.student_id = st.studentID
     ) AS STotal, 
     (
       SELECT SUM(t.mark) 
       FROM third_term_result AS t 
       WHERE t.subject_id = 7 
       AND t.student_id = st.studentID
     ) AS TTotal
  FROM students AS st
  WHERE st.studentID IN (
    SELECT studentID 
    FROM first_term_result AS fs 
    WHERE fs.subject_id = 7 
    AND fs.student_id = st.studentID)
  GROUP BY st.studentID
) AS M
JOIN students MS ON M.studentID = MS.studentID
ORDER BY (M.FTotal + M.STotal + M.TTotal) DESC
 类似资料:
  • 我需要开发一个web服务,这将帮助客户机做一些周期性的工作,api将喜欢这个void Dojob(int jobType,string cronExpression);

  • 问题内容: 表Words_Learned包含用户已知的所有单词以及 单词学习的顺序。它具有3列:1)单词ID和2)用户ID,以及3) 单词学习的顺序。 表中Article包含文章。它具有3列:1)文章ID,2) 唯一字数和3)文章内容。 该表Words包含每篇文章中包含的所有唯一单词的列表。 它有2列1)单词ID和2)文章ID 数据库图如下/ 在此处输入图片说明 您可以从此处下载数据库代码:htt

  • 问题内容: 我正在编写一个一次性Java程序,以将CSV文件中的一堆行添加到MySQL数据库。是否有任何Java类/工具包可以帮助您解决此问题?会逃脱必要字符等的东西吗?(例如,准备好的陈述) 还是我应该自己写语句,像这样: 问题答案: 如果使用的是JDBC,请使用PreparedStatement。此类将为您节省手动转义输入的麻烦。 该代码基本上看起来像这样(完全是从内存中开始的-希望我不要忽略

  • 问题内容: 是否有可能优化我编写的查询 我创建了一种动态虚拟数据库,以使用户能够添加自定义字段而不影响数据库结构。到目前为止,这是该结构的非常简化的视图。 我们可以通过在db_structure中添加一行来创建一个新字段 我们希望记录的任何数据都记录到db_data中。 名称存储在db_names中,而name_id存储在db_data中 我正在尝试将案例输出到html表 希望其余的内容可以自我解

  • 我有两个矩阵: 乘法应该采取这样的方式,就好像行向量和列向量都是从这两者中提取出来的 这样,对于第一个实例(第一行和第一列),结果将是: 这将垂直求和得到。这个和将给出最终答案。同样,第二行 这个最终标量值将用于比较哪个行及其相应的列具有高产量。

  • 只是无法计算方法中的return语句。

  • 问题内容: 最近,我被介绍了node.js以及一些很酷的包,例如express和jade。我有几个问题经常会敲门: 如果选择node.js构建下一个网站,我将使用JavaScript编写服务器端复杂的逻辑吗?但我认为您无法将JavaScript与Java或Python进行比较来编写服务器端代码,因为它们拥有如此众多的库。node.js是真的吗?还是我错过了什么? 我可以从node.js调用Java

  • 数据库:Sybase Advantage 11 在我对数据进行规范化的过程中,我试图删除从以下语句中得到的结果: