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函数都能实现这个效果,至于有什么区别,暂时不清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值