MySQL--数据表操作--行转列和列转行
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11782549.html
MySQL--数据表操作:
会用到的查询操作.
1. Limit的用法:
查询从下标5开始往后的10条数据(下标默认为0开始)
SELECT
*
FROM
stu_user
LIMIT 5,
10; 查询从下标5开始往后的所有数据(下标默认为0开始)
SELECT
*
FROM
stu_user
LIMIT 5,- 1; 查询前5条数据
SELECT
*
FROM
stu_user
LIMIT 5;
2. 行转列和列转行
a) 列转行
创建-->学生-科目分数表
(这种建表方式需要提前把所有的科目列都设计好,如果往后需要添加科目的话需要改动表结构)
CREATE TABLE stu_score (
stu_id INT NOT NULL,
sname VARCHAR ( 20 ) NOT NULL,
chscore CHAR ( 3 ) DEFAULT '0',
mathscore CHAR ( 3 ) DEFAULT '0',
enscore CHAR ( 3 ) DEFAULT '0'
); 表结构
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_id | int(11) | NO | | NULL | |
| sname | varchar(20) | NO | | NULL | |
| chscore | char(3) | YES | | 0 | |
| mathscore | char(3) | YES | | 0 | |
| enscore | char(3) | YES | | 0 | |
+-----------+-------------+------+-----+---------+-------+ 插入数据
INSERT INTO stu_score
VALUES
( 1, '张三', '77', '88', '66' );
INSERT INTO stu_score
VALUES
( 2, '李四', '23', '45', '13' );
INSERT INTO stu_score
VALUES
( 3, '王五', '94', '63', '45' ); 数据列表
+----+--------+---------+-----------+---------+
| id | sname | chscore | mathscore | enscore |
+----+--------+---------+-----------+---------+
| 1 | 张三 | 77 | 88 | 66 |
| 2 | 李四 | 23 | 45 | 13 |
| 3 | 王五 | 94 | 63 | 45 |
+----+--------+---------+-----------+---------+ 列转行(科目分数列转换为固定的科目值行数据和分数汇总列)
本质就是用UNION合并分批查询的数据,
有多少科目列需要转则分批多少次查询
SELECT
stu_id,
sname,
'语文' AS course,
chscore AS score
FROM
stu_score UNION
SELECT
stu_id,
sname,
'数学' AS course,
mathscore AS score
FROM
stu_score UNION
SELECT
stu_id,
sname,
'英语' AS course,
enscore AS score
FROM
stu_score
ORDER BY
stu_id; 列转行后的数据
+--------+--------+--------+-------+
| stu_id | sname | course | score |
+--------+--------+--------+-------+
| 1 | 张三 | 语文 | 77 |
| 1 | 张三 | 数学 | 88 |
| 1 | 张三 | 英语 | 66 |
| 2 | 李四 | 语文 | 23 |
| 2 | 李四 | 数学 | 45 |
| 2 | 李四 | 英语 | 13 |
| 3 | 王五 | 英语 | 45 |
| 3 | 王五 | 语文 | 94 |
| 3 | 王五 | 数学 | 63 |
+--------+--------+--------+-------+
b) 行转列
创建一个--学生分数科目表
CREATE TABLE stu_score_pro (
stu_id INT NOT NULL,
sname VARCHAR ( 20 ) NOT NULL,
course VARCHAR ( 20 ) NOT NULL,
score CHAR ( 3 ) NOT NULL
); 表结构
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| stu_id | int(11) | YES | | NULL | |
| sname | varchar(20) | NO | | NULL | |
| course | varchar(20) | NO | | NULL | |
| score | char(3) | NO | | NULL | |
+--------+-------------+------+-----+---------+-------+ 插入数据
INSERT INTO stu_score_pro
VALUES
( 1, '张三', '语文', '77' );
INSERT INTO stu_score_pro
VALUES
( 1, '张三', '数学', '88' );
INSERT INTO stu_score_pro
VALUES
( 1, '张三', '英语', '66' );
INSERT INTO stu_score_pro
VALUES
( 2, '李四', '语文', '23' );
INSERT INTO stu_score_pro
VALUES
( 2, '李四', '数学', '45' );
INSERT INTO stu_score_pro
VALUES
( 2, '李四', '英语', '13' );
INSERT INTO stu_score_pro
VALUES
( 3, '王五', '语文', '94' );
INSERT INTO stu_score_pro
VALUES
( 3, '王五', '数学', '63' );
INSERT INTO stu_score_pro
VALUES
( 3, '王五', '英语', '45' ); 数据列表
+--------+--------+--------+-------+
| stu_id | sname | course | score |
+--------+--------+--------+-------+
| 1 | 张三 | 语文 | 77 |
| 1 | 张三 | 数学 | 88 |
| 1 | 张三 | 英语 | 66 |
| 2 | 李四 | 语文 | 23 |
| 2 | 李四 | 数学 | 45 |
| 2 | 李四 | 英语 | 13 |
| 3 | 王五 | 语文 | 94 |
| 3 | 王五 | 数学 | 63 |
| 3 | 王五 | 英语 | 45 |
+--------+--------+--------+-------+ 行转列(正常的行数据根据列中有相同的值转成对应的列)
SELECT
stu_id,
sname,
max( CASE WHEN course = '语文' THEN score END ) AS 语文,
max( CASE WHEN course = '数学' THEN score END ) AS 数学,
max( CASE WHEN course = '英语' THEN score END ) AS 英语
FROM
stu_score_pro
GROUP BY
stu_id,
sname; 行转列后的数据
+--------+--------+--------+--------+--------+
| stu_id | sname | 语文 | 数学 | 英语 |
+--------+--------+--------+--------+--------+
| 1 | 张三 | 77 | 88 | 66 |
| 2 | 李四 | 23 | 45 | 13 |
| 3 | 王五 | 94 | 63 | 45 |
+--------+--------+--------+--------+--------+
MySQL--数据表操作--行转列和列转行的更多相关文章
- MySQL 数据表操作
MySQL 数据表操作 创建MySQL数据表需要以下信息: -表名: -表字段名: -定义每个表字段: 一.创建数据表 1)mysql> create table table_name (c ...
- mysql 数据表操作 目录
mysql 数据表操作 存储引擎介绍 mysql 使用存储引擎 mysql 数据表的增删改查 mysql 数据类型 mysql 约束条件
- mysql数据表操作&库操作
首先登陆mysql:mysql -uroot -proot -P3306 -h127.0.0.1 查看所有的库:show databases; 进入一个库:use database; 显示所在的库:s ...
- mysql 数据表操作 存储引擎介绍
一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...
- MYSQL数据表操作语句
1.查看某数据库中的表 SHOW [FULL] TABLES [FROM db_name] [LIKE 'pattern'] SHOW TABLES列举了给定数据库中的非TEMPORARY表.也可以使 ...
- MySQL数据表操作
创建数据表 打开数据库 USE 数据库名称 mysql> USE D1; Database changed 使用 USE D1:表示打开数据库D1,我们可以通过SELECT DATABASE() ...
- 03、MySQL—数据表操作
1.创建数据表 基本语法:create table 表名(字段名 字段类型 [字段属性], 字段名 字段类型 [字段属性],…) [表选项] 范例:创建数据表 以上错误说明:表必须放到对应的数据库下: ...
- MySQL数据表操作(DDL)
一.创建数据表 语法:create table 表名称(字段 字段类型 [字段属性],字段 字段类型 [字段属性],...) [表选项]; 表选项:数据表的属性,一般包括engine.charset. ...
- 设置mysql数据表列自动递增以及数据行插入操作
创建mysql数据表,设置id列递增.主键create table running_log ( id int primary key auto_increment, routename varchar ...
- Mysql之数据表操作
数据表操作: 查看当前数据库中所有的表: show tables; 查看当前使用数据库: select database(); 使用数据表: use 表名; 创建数据表: create table 数 ...
随机推荐
- 从零开始学springboot-2.配置项目
### 配置项目 #### 将application.properties改名为application.yml #### 在resources文件夹中(和上面那个配置文件同一路径下)新建一个文件app ...
- RSA非对称加密算法实现:C#
RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA ...
- 包含全国所有省份、城市、县的一份json文件
最近做项目时,有个需要全国所有省市信息的数据,于是百度了一下,发现CSDN的很多都需要积分下载,无解!所以自己收集了一份整理了出来. 简单说明一下 1.这是一份json文件,这是因为全国的省市信息一般 ...
- netty系列之:netty对SOCKS协议的支持
目录 简介 SocksMessage Socks4Message Socks5Message 总结 简介 SOCKS是一个优秀的网络协议,主要被用来做代理,它的两个主要版本是SOCKS4和SOCKS5 ...
- 深入浏览器工作原理和JS引擎(V8引擎为例)
浏览器工作原理和JS引擎 1.浏览器工作原理 在浏览器中输入查找内容,浏览器是怎样将页面加载出来的?以及JavaScript代码在浏览器中是如何被执行的? 大概流程可观察以下图: 首先,用户在浏览器搜 ...
- Java时间格式化原来这么多玩法
时间过得真是快,现在已经是2022年了.作为开发来说,时间处理是非常繁琐的.从Java 8开始有了新的时间API.时间的处理更加优雅,不再需要借助三方类库,而且线程安全.今天来梳理一下新API的格式化 ...
- Selenium_获取界面handle、title和url(7)
from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...
- 物理机异常断电,linux虚拟机系统磁盘mount失败,导致无法启动; kubectl 连接失败
虚拟机 CentOS 7 挂载文件系统失败 上周五下班前没有关闭虚拟机和物理机, 今天周一开了虚拟机之后,发现操作系统启动失败. 原因跟 这篇文章描述的一模一样. 解决操作系统的文件系统挂载的问题之后 ...
- 查看磁盘I/O命令iostat详解
iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.iostat也有一个弱 ...
- Word2010制作日历
原文: https://www.toutiao.com/i6494876164157342222/ 最终效果: 设置页面纸张为"横向". 选择"页面布局"选项卡 ...