mysql 慢慢来

记录一下昨天的面试题,源于数据库知识一向薄弱,所以从建库建表开始吧。

create database mytest;
use mytest;

create table marker(
  id int primary key auto_increment,
  stuName varchar(20),
  classType varchar(20),
  fenshu varchar(20)
)engine = InnoDB default charset=utf8 collate = utf8_unicode_ci;

insert into marker(stuName,classType,fenshu) values
('a','语文','79'),
('b','语文','86'),
('c','语文','68'),
('a','数学','86'),
('b','数学','80'),
('c','数学','92'),
('a','英语','76'),
('b','英语','84'),
('c','英语','73');
至此,marker表建立好了,数据也插入进去了。

恩,再修改一下名字吧

UPDATE marker set stuName = '张三' WHERE stuName = 'a';
UPDATE marker set stuName = '李四' WHERE stuName = 'b';
UPDATE marker set stuName = '王五' WHERE stuName = 'c';
现在数据库中的数据是这个样子的:


好了,有道题要求用一个查询语句将原表查询结果修改为这样:


其实就是行专列,以前根本不知道还能这样玩哭

select stuName name,
sum(case classType when '语文' then fenshu else 0 end) chinese,
sum(case classType when '数学' then fenshu else 0 end) math,
sum(case classType when '英语' then fenshu else 0 end) english
from marker
group by stuName;
恩,OK了。

在这里,再做一下额外的记录:sum函数和max函数都能实现这个效果,至于有什么区别,暂时不清楚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章