漫学笔记之mysql 行转列

来源:互联网 发布:mad建筑 知乎 编辑:程序博客网 时间:2024/04/30 05:36

漫学笔记之mysql 行转列

以下是测试数据

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 ;

查询结果:

漫学笔记之mysql 行转列

漫学笔记之mysql 行转列

行转列 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;

结果:

漫学笔记之mysql 行转列

行转列 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;

结果:

漫学笔记之mysql 行转列

列传行 新建表并 插入数据

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

查询结果:

漫学笔记之mysql 行转列

列转行 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 行转列

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 烧纸火纸迷信纸利润太低怎么办 刚买的绣球花花有点蔫怎么办 ZF葡7正常佩戴动能太满怎么办 怀孕初期老婆婆做的菜不好吃怎么办 调节协议已签字不签收调解书怎么办 给晋中苗圃拉了树苗没拿上钱怎么办 多肉旁边长出好多小株怎么办 烤瓷牙制备时颌关系不够怎么办 对门放石头正对我家大门怎么办 合租的室友关门开门特别大声怎么办 三周岁的宝宝小阴唇再次粘连怎么办 小阴唇内侧长了毛囊炎很大疼怎么办 小阴唇上一个黄豆大的硬疙瘩怎么办 梦幻西游手游金币兑换上限了怎么办 手机放裤子口袋里易拔出怎么办 两个月宝宝拉肚子怎么办吃纯母乳 花王泡沫染停留时间太久怎么办 ps右下角的图层图标隐藏了怎么办 压缩包文件太大微信无法传送怎么办 一寸照片的尺寸在ps中怎么办 遇到尖酸刻薄爱数落人的领导怎么办 初中一年级的学生就不想读书怎么办 电脑上所有文件都变得很大怎么办 小孩子手被门缝夹肿了怎么办 阳台挂衣服的单杆掉下来了怎么办 九个月婴儿受凉声音变沙哑怎么办 以汉字为主题的手抄报怎么办 用惯了笔画打字打不来拼音怎么办 老条石头给淤泥弄黑怎么办 新买的沙发垫子味很大怎么办 电脑表格中删去多余框线怎么办 农村教学点招不到学生老师怎么办 wps卡死了打的东西没保存怎么办 华为手机浏览器边框颜色变了怎么办 打印机打出来的字两边少怎么办 wps表格分页时表格断了怎么办 word里的表格一页放不下怎么办 表格上红色的字不能删除怎么办 渐变区的选择框变得很大怎么办 用乐秀编辑短片后两边有边框怎么办 安卓手机相机图标没有了怎么办