热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

开发笔记:MySQLDML操作实现pivot行转列功能最佳实战

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQLDML操作--------实现pivot行转列功能最佳实战相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL DML操作--------实现pivot行转列功能最佳实战相关的知识,希望对你有一定的参考价值。


1. 背景

  * 由于mysql 不支持类型Oracle与SQL Server的pivot功能进行行列转换。

技术分享

2. 表与数据

mysql> select * from t_temp;
+---------+-----------+------------+
| year    | season    | orderCount |
+---------+-----------+------------+
| 2010年  | 一季度    |        100 |
| 2010年  | 二季度    |        200 |
| 2010年  | 三季度    |        300 |
| 2010年  | 四季度    |        400 |
| 2011年  | 一季度    |        150 |
| 2011年  | 二季度    |        300 |
| 2011年  | 三季度    |        450 |
| 2011年  | 四季度    |        600 |
+---------+-----------+------------+
8 rows in set (0.00 sec)


3. 通过子查询与case when判断实现

mysql> select year, sum(orderCount1) ‘第一季度‘, 
    ->              sum(orderCount2) ‘第二季度‘, 
    ->              sum(orderCount3) ‘第三季度‘, 
    ->              sum(orderCount4) ‘第四季度‘ 
    -> from  
    ->     (
    ->         select year, 
    ->             case when season = ‘一季度‘ then 
    ->                 orderCount 
    ->             end orderCount1, 
    ->             case when season = ‘二季度‘ then 
    ->                 orderCount 
    ->             end orderCount2, 
    ->             case when season = ‘三季度‘ then 
    ->                 orderCount 
    ->             end orderCount3, 
    ->             case when season = ‘四季度‘ then 
    ->                 orderCount 
    ->             end orderCount4 
    ->         from t_temp
    ->     ) t 
    -> group by year;
+---------+--------------+--------------+--------------+--------------+
| year    | 第一季度     | 第二季度     | 第三季度     | 第四季度     |
+---------+--------------+--------------+--------------+--------------+
| 2010年  |          100 |          200 |          300 |          400 |
| 2011年  |          150 |          300 |          450 |          600 |
+---------+--------------+--------------+--------------+--------------+
2 rows in set (0.00 sec)


4. 通过IF聚合函数实现

mysql> SELECT year, 
    ->        SUM(IF(season = ‘一季度‘, orderCount, null)) AS ‘第一季度‘,
    ->        SUM(IF(season = ‘二季度‘, orderCount, null)) AS ‘第二季度‘,
    ->        SUM(IF(season = ‘三季度‘, orderCount, null)) AS ‘第三季度‘,
    ->        SUM(IF(season = ‘四季度‘, orderCount, null)) AS ‘第四季度‘
    -> FROM t_temp
    -> GROUP BY year;
+---------+--------------+--------------+--------------+--------------+
| year    | 第一季度     | 第二季度     | 第三季度     | 第四季度     |
+---------+--------------+--------------+--------------+--------------+
| 2010年  |          100 |          200 |          300 |          400 |
| 2011年  |          150 |          300 |          450 |          600 |
+---------+--------------+--------------+--------------+--------------+
2 rows in set (0.00 sec)


5. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

本文出自 “sea” 博客,请务必保留此出处http://lisea.blog.51cto.com/5491873/1949764


推荐阅读
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 本文详细介绍了在 MySQL、SQL Server 和 Oracle 数据库中如何使用分组和排序功能。涵盖了聚集函数的应用、HAVING 子句的作用以及特定数据库中的独特方法,如 SQL Server 的 ROW_NUMBER() 函数和 Oracle 的相关特性。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文介绍了如何在 Oracle 数据库中结合使用 UPDATE 和 SELECT 语句,以实现复杂的数据更新操作。首先准备测试环境和数据表,然后通过嵌套查询的方式从其他表中获取需要更新的值,最后执行更新操作并验证结果。 ... [详细]
  • 本文介绍了一种在 MySQL 客户端执行 NOW() 函数时出现时间偏差的问题,并详细描述了如何通过配置文件调整时区设置来解决该问题。演示场景中,假设当前北京时间为2023年2月17日19:31:37,而查询结果显示的时间比实际时间晚8小时。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
author-avatar
1hhhhhhhhhhh0_196_217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有