MySQL选择与聚合函数

MySQL选择与聚合函数,mysql,Mysql,我有一个简单的疑问: SELECT score,subject_name FROM exams_scores,subjects WHERE (admission_no = 2771) AND(subjects.subject_code = exams_scores.subject_code) 这给了我:所有5条记录都如预期的那样。 如果我这样做: 我只得了第一分。如果我想得到所有分数加上他们的总和,我应该使用什么 样本数据 admission_no subjec

我有一个简单的疑问:

SELECT 
      score,subject_name 
 FROM exams_scores,subjects 
WHERE (admission_no = 2771) AND(subjects.subject_code = exams_scores.subject_code)
这给了我:所有5条记录都如预期的那样。 如果我这样做:

我只得了第一分。如果我想得到所有分数加上他们的总和,我应该使用什么

样本数据

admission_no       subject     score
1000               Engligh      80
1000               Math         90
1000               Physics      70
2000               English      45
2000               Math         80
2000               Physics      90
我正在努力获得某一特定录取的所有分数加上总分数 因此,我预计:

入场证号码:1000,

得分:80,90,70


总计:240

您的第二次查询将所有行聚合为一个总和。这就是它应该做的。 为了保留行,一种方法是在
select
语句中添加并创建总和,如下所示:

SELECT 
   score,
   subject_name,
   (SELECT SUM (score) FROM exams_scores,subjects WHERE (admission_no = 2771) AND (subjects.subject_code = exams_scores.subject_code)) AS sum
FROM exams_scores,subjects 
WHERE (admission_no = 2771) AND(subjects.subject_code = exams_scores.subject_code)
像这样,总和被追加到每一行


编辑:为了添加总计行,
union
语句可以执行以下操作:

SELECT 
   score,
   subject_name,
   (SELECT SUM (score) FROM exams_scores,subjects WHERE (admission_no = 2771) AND (subjects.subject_code = exams_scores.subject_code)) AS sum
FROM exams_scores,subjects 
WHERE (admission_no = 2771) AND(subjects.subject_code = exams_scores.subject_code)

UNION

SELECT (0, 'Total', (SELECT SUM(... ... ...))
这应该可以,但我没有测试的细节。最后只有一行,而不是每组一行


使用
union
,您始终需要相同的列数、名称和类型。还有一点可能是,为了添加标题、格式等,最好离开SQL,使用PHP结构。

听起来你在寻找一个可以使用联合的汇总

SELECT score,subject_name 
 FROM  exams_scores,subjects 
WHERE  (admission_no = 2771) AND(subjects.subject_code = exams_scores.subject_code)
UNION ALL
SELECT sum(score), 'Total'
 FROM  exams_scores
WHERE  (admission_no = 2771)

最后添加
按主题分组\u name
。你能分享一些样本数据和你想要得到的结果吗?我刚刚添加了一些数据,你不想要主题名称吗?我可以得到,我现在只需要总数。我已经添加到我的答案中,请参见上文。在对联合查询进行一些修改后工作。再次感谢
SELECT score,subject_name 
 FROM  exams_scores,subjects 
WHERE  (admission_no = 2771) AND(subjects.subject_code = exams_scores.subject_code)
UNION ALL
SELECT sum(score), 'Total'
 FROM  exams_scores
WHERE  (admission_no = 2771)