--建立表
create
tabletb(
`cname`
varchar(10
),cource varchar(10
),score int
)engine
=innodb
;--插入資料
insert
into tb values
('張三'
,'語文',74
);insert
into tb values
('張三'
,'數學',83
);insert
into tb values
('張三'
,'物理',93
);insert
into tb values
('李四'
,'語文',74
);insert
into tb values
('李四'
,'數學',84
);insert
into tb values
('李四'
,'物理',94
);
原始表
姓名科目
成績張三
語文74
張三數學
83張三
物理93
李四語文
74李四
數學84
李四物理
94想要實現結果
姓名語文
數學物理
張三74.00
83.00
93.00
李四74.00
84.00
94.00
select
cname as
"姓名"
,sum(if
(cource=
"語文"
, score,0)
)as"語文"
,sum(if
(cource=
"數學"
, score,0)
)as"數學"
,sum(if
(cource=
"物理"
, score,0)
)as"物理"
from tb
group
by cname
select
cname as
"姓名"
,max
(case cource when
"語文"
then score else
0end)as
"語文"
,max
(case cource when
"數學"
then score else
0end)as
"數學"
,max
(case cource when
"物理"
then score else
0end)as
"物理"
from tb
group
by`cname`
查詢:
select * from tb group bycname
結果:
姓名cname
科目cource
成績張三
語文74
李四語文
74總結一:
行轉列,分組(group by)的列必須是除需要行轉列之外的業務主鍵。
例如tb表中業務主鍵應該是cname和cource,但是cource需要進行行轉列,所以需要按照cname分組。
17 MySQL的小技巧
1.正規表示式的使用 在字串開始處進行匹配 在字串末尾處進行匹配 匹配任意單個字元,包括換行符 匹配出括號內的任意字元 匹配不出括號內的任意字元 a 匹配零個或多個a 包括空串 a 匹配1個或多個a 不包括空串 a?匹配1個或0個a a1 a2 匹配a1或a2 a m 匹配m個a a m,匹配m個或...
17 mysql內建功能 事物
事務用於將某些操作的多個sql作為原子性操作,一旦有某乙個出現錯誤,即可回滾到原來的狀態,從而保證資料庫資料完整性。create table user id int primary key auto increment,name char 32 balance int insert into use...
17 MySQL變數 宣告與賦值
變數 可在儲存程式 儲存過程和函式 中使用變數 變數作用域 在儲存程式中的begin.end間 1 mysql變數 宣告 declare varname varname2.type default value declare宣告關鍵字 varname varname2 變數名 可多個變數同時宣告 t...