mysql學生行轉列 漫學筆記之mysql 行轉列

2021-10-18 08:57:26 字數 3440 閱讀 1252

以下是測試資料

create table student (

stuid varchar(16) not null comment '學號',

stunm varchar(20) not null comment '學生姓名',

primary key (stuid)

insert into student values

('1001', '西施'),

('1002', '王昭君'),

('1003', '貂蟬');

create table courses (

courseid varchar(20) not null comment '課程編號',

coursenm varchar(100) not null comment '課程名稱',

primary key (courseid)

)comment='課程表';

insert into courses values

('c1001','琴'),

('c1002','棋'),

('c1003','書'),

('c1004','畫');

create table score (

scid varchar(16) not null comment'成績編號',

stuid varchar(16) not null comment'學生編號',

courseid varchar(20) not null comment'課程編號',

scores float null default null comment'成績',

primary key (scid)

insert into score values

('1','1001','c1001',80),

('2','1001','c1002',90),

('3','1001','c1003',82),

('4','1001','c1004',83),

('5','1002','c1001',83),

('6','1002','c1002',90),

('7','1002','c1003',85),

('8','1002','c1004',86),

('9','1003','c1001',90),

('10','1003','c1002',89),

('11','1003','c1003',82),

('12','1003','c1004',88);

select score.stuid ,stunm , coursenm,scores from score

inner join student on student.stuid = score.stuid

inner join courses on courses.courseid = score.courseid order by stuid , scores ;

查詢結果:

行轉列 1 使用max函式

select score.stuid,stunm,

max( case when courses.coursenm = '琴' then ifnull(score.scores,0) end ) '琴' ,

max( case when courses.coursenm = '棋' then ifnull(score.scores,0) end ) '棋' ,

max( case when courses.coursenm = '書' then ifnull(score.scores,0) end ) '書' ,

max( case when courses.coursenm = '畫' then ifnull(score.scores,0) end ) '畫'

from score

inner join courses on courses.courseid = score.courseid

inner join student on student.stuid = score.stuid

group by score.stuid;

結果:行轉列 2 使用sum函式

select score.courseid 課程編號,courses.coursenm 課程名稱,

sum( case when student.stunm = '西施' then ifnull(score.scores,0) end ) '西施' ,

sum( case when student.stunm = '王昭君' then ifnull(score.scores,0) end ) '王昭君' ,

sum( case when student.stunm = '貂蟬' then ifnull(score.scores,0) end ) '貂蟬'

from score

inner join courses on courses.courseid = score.courseid

inner join student on student.stuid = score.stuid

group by score.courseid;

結果:列傳行 新建表並 插入資料

create table result (

stuid varchar(16) not null comment'學生編號',

stunm varchar(20) not null comment'學生姓名',

qin float null default null comment'琴成績',

qi float null default null comment'棋成績',

shu float null default null comment'書成績',

hua float null default null comment'畫成績'

insert into result values

('1001','西施',80,90,82,83),

('1002','王昭君',83,90,85,86),

('1003','貂蟬',90,90,82,88);

select * from result

查詢結果:

列轉行 union

union 用於合併兩個或多個 select 語句的結果集。

select stuid , stunm , '琴' 課程 , qin as 成績 from result

union

select stuid , stunm , '棋' 課程 , qi as 成績 from result

union

select stuid , stunm , '書' 課程 , shu as 成績 from result

union

select stuid , stunm , '畫' 課程 , hua as 成績 from result

order by stuid , 課程

查詢結果:

mysql 動態行轉列 MySQL行轉列

比如乙個單子,多個收據單用逗號隔開,怎麼把這乙個單子所有收據單獨展示出來,行轉成列呢?方法一 這裡需要用到迴圈,首先建立乙個1 10的序列 select rownum rownum 1 as seq from select rownum 0 r,bills limit 0,10 其次依次運用 sub...

mysql行轉列 subs mysql 行轉列

存在表score,記錄學生的考試成績,如下圖所示 現要求以 學生姓名,語文,數學,英語 這種格式顯示學生成績,如下圖所示 具體步驟如下 1 首先,使用case when函式輸出單個課程的成績 case when course 語文 then score end as 語文 case when cou...

mysql行轉列怎麼用 mysql錶行轉列的用法

現在有一張score表,儲存學生每門課的成績,結構資料如下 idnamesubjectscore 1張三 語文90 2張三 數學88 3張三 外語75 4李四 語文99 5李四 數學70 6李四 外語95 7李五 語文88 8李五 數學85 9李五 外語90 現在要求列出每個學生所有課程的成績.這就...