記錄一下昨天的面試題,源於數據庫知識一向薄弱,所以從建庫建表開始吧。
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函數都能實現這個效果,至於有什麼區別,暫時不清楚。