在本文中,我们将研究MySQL中如何将动态列转换为行。我们将使用MySQL 5.7版本。
阅读更多:
MySQL 教程
数据模型和样本测试数据
在本文中,我们将使用一个名为sales的表。表格由以下列组成:
SaleID
Price
Month
这张表有四列。每列都是固定的且事先已知的。有时,我们需要使用类似的数据,但列不是固定的。例如,sales表可以包含更多的列,例如仓库和地区,甚至可以包含更多不同的产品。我们将学习如何使用这种数据模型来转换动态列。
转置动态列
我们将展示如何将动态列转换为行。为此,我们将创建一个由item、month和price组成的二维数组。我们将先使用静态列进行示例,并在之后处理动态列。
我们可以使用以下查询来获取将列转换为行的结果:
SELECT* FROM (SELECT item,
MAX(IF(month = 'January', price, NULL)) AS January,
MAX(IF(month = 'February', price, NULL)) AS February
FROM sales GROUP BY item) sales_transpose
该查询将输出以下结果:
January
February
我们现在让该查询处理动态列。
在这个例子中,我们将使用sales表,并添加额外的列warehouse和region。我们的任务将是将所有的动态列与转置月份相结合。这将使我们能够动态将列转换为行,而不必使用硬编码列名称。
我们需要使用以下查询来执行此操作:
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(month = ''',
month,''', price, NULL)) AS ',month)) INTO @sql
FROM sales;
SET @sql = CONCAT('SELECT item, ', @sql, ' FROM sales GROUP BY item');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
在这个例子中,我们首先定义了一个变量@ sql。我们将使用它来存储动态地构造的SQL查询的文本。我们然后选择一个DISTINCT month列的值,并使用它们来构造MAX(IF())句子。这个句子将执行条件语句,以将price值添加到我们动态构造的列中。
接下来,我们将SELECT语句动态地设置为包含所构造的查询。最后,我们准备并执行该语句。
该查询将输出以下结果:
January
February
使用这个方法,我们可以将动态列动态地转换为行。无论表中有多少个动态列,我们都可以使用相同的代码。
在本文中,我们学习了如何使用MySQL将动态列转换为行。我们使用两个例子解释了如何使用静态列和动态列。在每个例子中,我们演示了如何将列转换为行,以便更好地处理和分析数据。
对于转置动态列的示例运用了MySQL中的动态SQL语句,它们通过字符串操作创建了一个动态地构造的SQL查询。这种技术可以用于处理所有类型的动态表格,这将为分析和处理大规模数据提供更多的灵活性。
希望本文对你有帮助,并在你需要将动态列转换为行时为你提供指导。
- MySQL 问答
- MySQL 树形结构查询的实现MySQL Python: tuple indices must be integers, not str when selecting from MySQL table错误什么是客户端预处理语句MySQL GROUP BY WITH ROLLUP总结MySQL Ruby on Rails MYSQL error Access denied for user 'root@localhost'错误MySQL 如何将开发数据库中的index导出并导入到生产数据库MySQL Order by 1是什么MySQL 将表名变为大写字母MySQL Where binary说明当我们在一个DATETIME类型的字段上设置ON UPDATE CURRENT_TIMESTAMP时,MySQL不允许我们这样做MySQL PreparedStatement概述MySQL Warning: mysql_query(): 3 is not a valid MySQL-Link resource错误MySQL & PHP - Not unique table/alias错误MySQL 导出文件转换成可导入SQLite3数据库的脚本MySQL 如何获取Doctrine的TEXT类型MySQL 如何从UTC时间中获取Unix时间戳MySQL 是否存在与 UNION 相反但等效的函数MySQL 命令行下的恢复MYSQL Dump文件MySQL 在WAMP中的数据库文件存储位置MySQL SQL-Dump是什么MySQL 容器中的数据提交MySQL 如何将Scrapy中的items写入MySQL数据库MySQL MySQL error #2014 - Commands out of sync; you can't run this command now错误MySQL 如何使查询结果按条件顺序排序MySQL 去除没有主键的重复行MySQL 查询获取原始十进制值MySQL 视觉化查询构建器MySQL 数据库备份与复制方法MySQL Flush Tables的作用与用法MySQL 如何在Laravel中将数组转换为字符串MySQL SELECT查询MySQL java.sql.SQLException: Field 'supplier_id' doesn't have a default value错误MySQL PDO中的bindParam()与预编译语句不起作用MySQL UNION 结合 ORDER BY 时无效的问题MySQL 将.frm和.opt文件导入到MySQL中MySQL 出现'Truncated incorrect INTEGER value'的原因和解决办法MySQL Pdo 不指定数据库名称连接MySQL MyBatis如何优雅地使用MySQL的“IN”子句MySQL Incorrect decimal (integer) value: ''错误解决方法如何在MySQL中删除未命名的外键什么是MySQL Doctrine: ON DUPLICATE KEY UPDATEMySQL 如何设置Hibernate来读/写不同的数据源MySQL Laravel 中如何存储 JSON 格式的数据MySQL 在phpmyadmin中向现有表格插入列MySQL 5 - 如何解决“root账户无法创建数据库或进行任何操作”的问题(Access Denied)MySQL 使用SELECT语句查询时会返回全部行,而不是只返回这个字段为0的行MySQL 如何检查表是否为UTF-8编码且存储引擎为InnoDBMySQL 将多行数据合并成一行MySQL Django south migration - 添加FULLTEXT索引MySQL & PHP 实现邮编定位搜索MySQL 如何将动态列转换为行MySQL 使用Pentaho Kettle,如何在保持引用完整性的同时从单一表中加载多个表MySQL JOIN三个表的操作步骤MySQL 如何通过命令行查看SELECT查询后的警告信息MySQL 获取最后插入行的IDMySQL 与 Mysql 5.7 不兼容MySQL 如何使用 MySQL Doctrine QueryBuilder 进行 delete with joins 操作MySQL 如何估计SQL查询时间MySQL 如何有条件地处理 MySQL 的除零情况MySQL magento 为每个store view存储图片如何使用Boto3来与Amazon Aurora on RDS进行交互MySQL 如何获取 phpMyAdmin 的用户名和密码MySQL 老密码验证不再提供支持,使用4.1样式密码MySQL QUERY SELECT语句与SUM()MySQL 如何在创建表时定义列的默认值MySQL 位运算在使用 Laravel Sail 进行开发和部署时,遇到 MySQL 连接不上的问题在使用MySQL操作数据库时,经常会使用Phpmyadmin这个图形化工具MySQL 数据库中按权限位掩码选择用户MySQL 使用IF()和ON DUPLICATE KEY UPDATEMySQL 如何将 datetime 转换为 date 以及一些实际应用案例MySQL 如何计算排除周末和假期的日期差MySQL 如何将List类型添加到mysql参数中MySQL 如何根据主表中的值从另一个表中选择两个附加列MySQL 函数的使用及查询返回值MySQL 同一表多对多关系MySQL 首次查询速度慢,但关联查询速度快的解决方法MySQL 使用Group_Concat函数忽略空字符串列的方法MySQL 如何在使用 OPENQUERY 连接两个表时忽略重复键MySQL 时间戳字段在Django中的使用MySQL Slow Query Log 的介绍MySQL alter table add foreign key failsMySQL 如何检查MySQL表中是否存在某一列MySQL 数据库在 Python Web 服务器中的连接保持方法MySQL 数据库模式 - 表示位置MySQL Proximity Search(接近度搜索)的实现方法MySQL 数据库范式化MySQL 全文搜索中最佳处理拼写错误的方法MySQL 视图(Views)和PHP查询(PHP queries)的区别MySQL 实现用户通过Google账号登录网站MySQL 如何从主机连接运行在Docker上的MySQLMySQL 单个查询删除数据库中的所有表MySQL 如何在表中加密特定列MySQL 选择复合索引还是独立索引MySQL Unix时间戳和datetimeMySQL 数据库在Linux机器上存储的实际数据在哪里MySQL 如何将整个结果集合并起来MySQL 在池中检查活动的SQLAlchemy连接数MySQL Order by category_idMySQL 如何同步MySQL远程和本地数据库MySQL 查询无效的外键