sql语句统计各个学生各科成绩(case when用法)

2019年8月12日16:16:55 5 50
华为云学生机

最近遇到一个SQL相关(数据库比较弱)的难题,思索了半天,最后在朋友的帮助下,终于解决了,利用case when这个方法就可以解决。

原问题我就不在这里说明了,用一个经典的学生成绩来说明吧。

表score

建表语句

  1. -- 创建表score
  2. CREATE TABLE [dbo].[score] (
  3.     [id] INT NOT NULL IDENTITY (1, 1),
  4.     [nameVARCHAR (20) NOT NULL,
  5.     [category] VARCHAR (20) NOT NULL,
  6.     [score] INT NOT NULL
  7. );
  8. -- 设置id为主键
  9. ALTER TABLE [dbo].[score] ADD PRIMARY KEY ([id]);

SQL问题

查询学生的各科成绩和总分,效果如下图,使用SQL语句写出来

查询SQL语句

  1. SELECT name AS 姓名,
  2.          SUM (
  3.     CASE
  4.     WHEN category = '语文' THEN
  5.     score
  6.     ELSE 0
  7.     END ) AS '语文', SUM (
  8.     CASE
  9.     WHEN category = '数学' THEN
  10.     score
  11.     ELSE 0
  12.     END ) AS '数学', SUM (
  13.     CASE
  14.     WHEN category = '英语' THEN
  15.     score
  16.     ELSE 0
  17.     END ) AS '英语', SUM (score) AS '总分'
  18. FROM score
  19. GROUP BY  name;

小结

case when与case ... when的区别

  1. case when后面接的是某个表的字段的时候,then可以接另外一个字段,整个字段的查询结果是then后面的类型,如上面示例中,查语文成绩,then后面是score,是整型,那么查出来该字段也是整型;
  2. case ... when 中,case后面就接了一个字段了,那么该语句查出来的结果,其类型与case后面的字段类型一致。如:case category when '语文' then ...;该语句中,case后面是category,是varchar类型,那么这条case...when语句查出来的结果也是varchar类型。
weinxin
微信公众号
博客微信公众号,欢迎关注。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:5   其中:访客  3   博主  2

    • avatar wordpress建站吧 3

      sql博大精深,可惜只学了点皮毛

        • avatar 萧瑟  博主

          @wordpress建站吧 我也是,有空还是要深入学习一下的。

        • avatar 小王先森 5

          最近更新很积极啊

            • avatar 萧瑟  博主

              @小王先森 每天都在不断学习,要记录一下的。