MySql行转列、列转行
时间:2018-12-10
本文章向大家介绍MySql行转列、列转行,主要包括MySql行转列、列转行相关应用实例、知识点总结和注意事项,具有一定的参考价值,需要的朋友可以参考一下。
现mysql中有一张表php_user表,表结构为:
表中数据有:
现在想查询出来不同学生的语数外成绩在一行显示,那么需要用到行转列的用法,
一、行转列
1、使用case...when....then 进行行转列
MAX(case when 条件 then 列内容 else 不匹配时显示内容 end) 列名。具体sql如下:
2、使用IF() 进行行转列:
3、利用SUM(IF()) 生成列,直接生成结果不再利用子查询
二、列转行
建表语句:
CREATE TABLE tb_score1( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT '用户id', cn_score DOUBLE COMMENT '语文成绩', math_score DOUBLE COMMENT '数学成绩', en_score DOUBLE COMMENT '英语成绩', po_score DOUBLE COMMENT '政治成绩', PRIMARY KEY(id) )ENGINE = INNODB DEFAULT CHARSET = utf8;
插入数据:
INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('001',90,92,80,0); INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('002',88,90,75.5,0); INSERT INTO tb_score1(userid,cn_score,math_score,en_score,po_score) VALUES ('003',70,85,90,82);
查询数据表中的内容(即转换前的结果)
SELECT * FROM tb_score1
转换后:
本质是将userid的每个科目分数分散成一条记录显示出来。
直接上SQL:
SELECT userid,'语文' AS course,cn_score AS score FROM tb_score1 UNION ALL SELECT userid,'数学' AS course,math_score AS score FROM tb_score1 UNION ALL SELECT userid,'英语' AS course,en_score AS score FROM tb_score1 UNION ALL SELECT userid,'政治' AS course,po_score AS score FROM tb_score1 ORDER BY userid
这里将每个userid对应的多个科目的成绩查出来,通过UNION ALL将结果集加起来,达到上图的效果。
附:UNION与UNION ALL的区别(摘):
1.对重复结果的处理:UNION会去掉重复记录,UNION ALL不会;
2.对排序的处理:UNION会排序,UNION ALL只是简单地将两个结果集合并;
3.效率方面的区别:因为UNION 会做去重和排序处理,因此效率比UNION ALL慢很多;
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- ELK-elasticsearch-6.3.2部署
- Real World CTF 2018 bookhub 总结
- python http.server open redirect vulnerability
- ELK-elasticsearch-6.3.2插件【head,bigdesk,cerebro[kopf]】安装
- ELK-kibana-6.3.2部署
- node.js + postgres 从注入到Getshell
- ELK-logstash-6.3.2部署
- K8S节点异常怎么办?TKE"节点健康检查和自愈"来帮忙
- ELK-logstash-6.3.2-常用配置
- ELK-elkstack-使用消息队列
- kafka_2.11-2.0.0_安装部署
- 谈escapeshellarg绕过与参数注入漏洞
- Django debug page XSS漏洞(CVE-2017-12794)分析
- kafka_2.11-2.0.0_常用操作
- shell脚本:通过域名获取证书的过期时间