MYSQL when case的用法和行转列的实现

一 when case 的用法

       1.简单函数 CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END

           MYSQL when case的用法和行转列的实现_第1张图片

         现在有如上的表,想要自定义每个人物使用的武器,可以使用如下的语句 

select 人物"英雄",case 人物 when "诸葛亮" then "扇子" when "吕布" then "方天画戟"
else"不使用武器" end"使用的武器" from sanguo

        运行结果

            MYSQL when case的用法和行转列的实现_第2张图片 英雄 和 使用的武器 是自定义的字段.

      2. 搜索函数 CASE WHEN [expr] THEN [result1]…ELSE [default] END

          搜索函数可以进行判断,并且搜索函数只会返回第一个符合条件的值,其他case被忽略

          MYSQL when case的用法和行转列的实现_第3张图片

select 人物'英雄', age'年龄', case when age>30 and case<40 then '壮年' when age>40 and 
age<50 then'中年' else '老年' end'状态' from sanguo

  查询结果 MYSQL when case的用法和行转列的实现_第4张图片 其中 语句中的人物'英雄' 和 人物 as 英雄 是同样效果.

二 使用 when case 实现行转列

       建表语句和数据插入

CREATE TABLE `edu_student` (
    `stu_id` VARCHAR (16) NOT NULL COMMENT '学号',
    `stu_name` VARCHAR (20) NOT NULL COMMENT '学生姓名',
    PRIMARY KEY (`stu_id`)
) COMMENT = '学生表' ENGINE = INNODB;


CREATE TABLE `edu_courses` (
    `course_no` VARCHAR (20) NOT NULL COMMENT '课程编号',
    `course_name` VARCHAR (100) NOT NULL COMMENT '课程名称',
    PRIMARY KEY (`course_no`)
) COMMENT = '课程表' ENGINE = INNODB;
CREATE TABLE `edu_score` (
    `stu_id` VARCHAR (16) NOT NULL COMMENT '学号',
    `course_no` VARCHAR (20) NOT NULL COMMENT '课程编号',
    `scores` FLOAT NULL DEFAULT NULL COMMENT '得分',
    PRIMARY KEY (`stu_id`, `course_no`)
) COMMENT = '成绩表' ENGINE = INNODB;


INSERT INTO edu_student (stu_id, stu_name)
VALUES
    ('1', '小李'),
    ('2', '小王'),
    ('3', '小张'),
    ('4', '小孙'),
    ('5', '小刘'),
    ('6', '小龟');

INSERT INTO edu_courses (course_no, course_name)
VALUES
    ('C1', '渣男的自我修养'),
    ('C2', '如何讨得富婆欢心'),
    ('C3', '少奋斗三十年')
INSERT INTO edu_score (stu_id, course_no, scores)
VALUES
('1','c1','60'),('1','c2','75'),('1','c3','94'),
('2','c1','84'),('2','c2','76'),('2','c3','46'),
('3','c1','25'),('3','c2','89'),('3','c3','86'),
('4','c1','99'),('4','c2','92'),('4','c3','67'),
('5','c1','62'),('5','c2','20'),('5','c3','73'),
('6','c1','100'),('6','c2','98'),('6','c3','96')

  查询结果

select stu.stu_id as 学号,stu.stu_name as 名字,sum(case co.course_name when '渣男的自我修养' then sc.scores else 0 end) '渣男的自我修养' ,
sum(case co.course_name when '如何讨得富婆欢心' then sc.scores else 0 end) '如何讨得富婆欢心' ,
sum(case co.course_name when '少奋斗三十年' then sc.scores else 0 end) '少奋斗三十年' 
FROM
    edu_student stu
LEFT JOIN edu_score sc ON stu.stu_id = sc.stu_id
LEFT JOIN edu_courses co ON co.course_no = sc.course_no
GROUP BY
    stu.stu_id

 

MYSQL when case的用法和行转列的实现_第5张图片

你可能感兴趣的:(Mysql,mysql)