mysql一维表转二维表,动态的行转列
mysql 动态 二维 一维 转列
2023-09-11 14:19:18 时间
mysql一维表转二维表,动态的行转列
转为二维表
一 静态转换
固定表头信息,如:语文和数学已经知道了
SELECT s.name,
Sum(if(s.subject='语文',s.score,0)) '语文',
Sum(if(s.subject='数学',s.score,0)) '数学'
FROM t_student as s
GROUP BY s.name
这里用到 聚合函数,sum与max根据自己需要更换
二 动态转换
不固定表头,即可以多个列。如:可以添加英语进去,也能自动转换
2.1 获取 表头的 sql语句
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('SUM(IF(s.subject=''',s.subject,''',s.score,NULL)) AS ''',s.subject,'''')
)
FROM t_student as s
用到 DISTINCT区唯一值,CONCAT 拼接语句
2.2 动态获取
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('SUM(IF(s.subject=''',s.subject,''',s.score,NULL)) AS ''',s.subject,'''')
)
INTO @sql
FROM t_student as s;
SET @sql = CONCAT('Select s.name, ',@sql,
' FROM t_student as s
GROUP BY s.name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
添加一条英文课程的
效果如:
动态增加列,可以自己去使用一下,谢谢
相关文章
- 【Mysql 学习】日期函数函数
- 【Mysql 学习】mysqld_safe:MySQL服务器启动脚本
- 【MySQL】批量删除mysql中数据库中的表
- 【MySql】开机自动启动mysql服务
- 【Mysql】初识MySQL
- 第二百七十八节,MySQL数据库-表内容操作
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- connection to dat Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- 使用mysql-connector-python操作MYSQL数据库
- 使用Amoeba for mysql实现mysql读写分离
- 数据库基础之Mysql(3)mysql删除历史binlog
- MySQL · 捉虫动态 · 连接断开导致XA事务丢失
- MySQL 初步安装后更改datadir目录几种方式
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- mysql 1366的错误 字符集错误解决方案
- MYSQL导入数据报错|MYSQL导入超大文件报错|MYSQL导入大数据库报错:2006 - MySQL server has gone away
- file /usr/share/mysql/charsets/README from install of MySQL-server-5.1.73-1.glibc23.i386 conflicts with file from package mysql-libs-5.1.73-8.el6_8.i686
- replace into 详解 update mysql
- [MySQL] 解决办法: Error: Transaction test error: file /etc/my.cnf from install of mysql-community-server
- mysql 查看 脏页_MySQL:刷脏页
- Mysql报错:Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- MySQL_06_事务隔离性的两种实现方式