mysql整理17 MySQL行轉列實現方式總結

2021-09-11 03:44:04 字數 1917 閱讀 3416

--建立表

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...