繁体   English   中英

SQL分组依据并计入各科目的成绩总计

[英]SQL group by and count for grade totals over subjects

我还没有找到一个完全符合我想要的答案的答案。

老实说,我不太确定该怎么做!

我有一张表格,列出各学科的学生取得的成绩:

学生课程成绩

我想要一张表格,该表格显示每个科目的成绩分布情况,以及每个授予的成绩总数:

学生课程成绩

到目前为止,我的查询是:

SELECT subjectcode,
(SELECT COUNT(grade) FROM results WHERE grade = "A") as A,
(SELECT COUNT(grade) FROM results WHERE grade = "B") as B,
(SELECT COUNT(grade) FROM results WHERE grade = "C") as C,
(SELECT COUNT(grade) FROM results WHERE grade = "D") as D,
(SELECT COUNT(grade) FROM results WHERE grade = "E") as E
FROM results
GROUP BY grade
ORDER BY subjectcode ASC;

任何意见或建议,将不胜感激。

谢谢。

使用条件聚合,而不是多个子查询:

SELECT subjectcode,
       SUM(CASE WHEN grade = 'A' THEN 1 END) as A,
       SUM(CASE WHEN grade = 'B' THEN 1 END) as B,
       SUM(CASE WHEN grade = 'C' THEN 1 END) as C,
       SUM(CASE WHEN grade = 'D' THEN 1 END) as D,
       SUM(CASE WHEN grade = 'E' THEN 1 END) as E
FROM results
GROUP BY subjectcode
ORDER BY subjectcode ASC;

笔记:

  • group by子句是固定的。 您在group by grade依据group by ,但subjectcode进行排序,这没有意义。 大多数数据库甚至都不允许这样做。
  • 在这种case没有else子句,因此不匹配将产生NULL
  • 字符串常量由单引号而不是双引号分隔。 单引号是ANSI标准,应用于字符串和日期常量。
  • 这称为数据透视查询,某些数据库具有直接支持它们的语法。
declare @grades table(result_id int identity, upn int, grade varchar(2), subjectcode varchar(2))

insert into @grades (upn,grade,subjectcode) values
(1,'D','Ar'),
(1,'A','Bi'),
(1,'C','Ch'),
(2,'A*','Ar'),
(2,'B','Ch'),
(2,'A*','PE'),
(3,'C','Ar'),
(3,'C','Ph'),
(3,'A','Bi')


SELECT subjectcode,
    ISNULL(SUM(CASE WHEN grade = 'A*' THEN 1 END),'') 'A*',
    ISNULL(SUM(CASE WHEN grade = 'A' THEN 1 END),'') A,
    ISNULL(SUM(CASE WHEN grade = 'B' THEN 1 END),'') B,
    ISNULL(SUM(CASE WHEN grade = 'C' THEN 1 END),'') C,
    ISNULL(SUM(CASE WHEN grade = 'D' THEN 1 END),'') D,
    ISNULL(SUM(CASE WHEN grade = 'E' THEN 1 END),'') E,
    ISNULL(SUM(CASE WHEN grade = 'F' THEN 1 END),'') F,
    ISNULL(SUM(CASE WHEN grade = 'G' THEN 1 END),'') G,
    ISNULL(SUM(CASE WHEN grade = 'U' THEN 1 END),'') U,
    ISNULL(SUM(CASE WHEN grade = 'X' THEN 1 END),'') X

FROM @grades
GROUP BY subjectcode
ORDER BY subjectcode ASC;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM