mysql 行列转换 动态_mysql 行列动态转换的实现(列联表,交叉表)

(1)动态,适用于列不确定情况

create table table_name(

id int primary key,

col1 char(2),

col2 char(2),

col3 int

);

insert into table_name values

(1 ,'A1','B1',9),

(2 ,'A2','B1',7),

(3 ,'A3','B1',4),

(4 ,'A4','B1',2),

(5 ,'A1','B2',2),

(6 ,'A2','B2',9),

(7 ,'A3','B2',8),

(8 ,'A4','B2',5),

(9 ,'A1','B3',1),

(10 ,'A2','B3',8),

(11 ,'A3','B3',8),

(12 ,'A4','B3',6),

(13 ,'A1','B4',8),

(14 ,'A2','B4',2),

(15 ,'A3','B4',6),

(16 ,'A4','B4',9),

(17 ,'A1','B4',3),

(18 ,'A2','B4',5),

(19 ,'A3','B4',2),

(20 ,'A4','B4',5);

select * from table_name;

+----+------+------+------+

| id | col1 | col2 | col3 |

+----+------+------+------+

| 1 | A1 | B1 | 9 |

| 2 | A2 | B1 | 7 |

| 3 | A3 | B1 | 4 |

| 4 | A4 | B1 | 2 |

| 5 | A1 | B2 | 2 |

| 6 | A2 | B2 | 9 |

| 7 | A3 | B2 | 8 |

| 8 | A4 | B2 | 5 |

| 9 | A1 | B3 | 1 |

| 10 | A2 | B3 | 8 |

| 11 | A3 | B3 | 8 |

| 12 | A4 | B3 | 6 |

| 13 | A1 | B4 | 8 |

| 14 | A2 | B4 | 2 |

| 15 | A3 | B4 | 6 |

| 16 | A4 | B4 | 9 |

| 17 | A1 | B4 | 3 |

| 18 | A2 | B4 | 5 |

| 19 | A3 | B4 | 2 |

| 20 | A4 | B4 | 5 |

+----+------+------+------+

SET @EE='';

SELECT @EE:=CONCAT(@EE,'SUM(IF(col2=\'',col2,'\'',',col3,0)) AS ',col2,',') FROM (SELECT DISTINCT col2 FROM table_name) A;

SET @QQ=CONCAT('SELECT ifnull(col1,\'total\') AS columnA,',LEFT(@EE,LENGTH(@EE)-1),' ,SUM(col3) AS TOTAL FROM table_name GROUP BY col1 WITH ROLLUP');

PREPARE stmt2 FROM @QQ;

EXECUTE stmt2;

+---------+------+------+------+------+-------+

| columnA | B1 | B2 | B3 | B4 | TOTAL |

+---------+------+------+------+------+-------+

| A1 | 9 | 2 | 1 | 11 | 23 |

| A2 | 7 | 9 | 8 | 7 | 31 |

| A3 | 4 | 8 | 8 | 8 | 28 |

| A4 | 2 | 5 | 6 | 14 | 27 |

| total | 22 | 24 | 23 | 40 | 109 |

+---------+------+------+------+------+-------+

(2)第二个字段确定的情况下使用

SELECT

IFNULL(col1,'total') AS total,

SUM(IF(col2='B1',col3,0)) AS B1,

SUM(IF(col2='B2',col3,0)) AS B2,

SUM(IF(col2='B3',col3,0)) AS B3,

SUM(IF(col2='B4',col3,0)) AS B4,

SUM(IF(col2='total',col3,0)) AS total

FROM (

SELECT col1,IFNULL(col2,'total') AS col2,SUM(col3) AS col3

FROM table_name

GROUP BY col1,col2

WITH ROLLUP

HAVING col1 IS NOT NULL

) AS A

GROUP BY col1

WITH ROLLUP;

注: WITH ROLLUP 用于列上求和; SUM(IF(col2='total',col3,0)) AS total 用于行上求和。

(3)第二个字段确定的情况下使用

select ifnull(col1,'total') AS col1,

sum(if(col2='B1',col3,0)) AS B1,

sum(if(col2='B2',col3,0)) AS B2,

sum(if(col2='B3',col3,0)) AS B3,

sum(if(col2='B4',col3,0)) AS B4,SUM(col3) AS TOTAL

from table_name

group by col1 with rollup ;

以上这篇mysql 行列动态转换的实现(列联表,交叉表)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: mysql 行列动态转换的实现(列联表,交叉表)

本文地址: http://www.cppcns.com/shujuku/mysql/175566.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第六次作业—例行报告

本周PSP 进度条 代码累计折线图 博文累计折线图 本周饼状图 转载于:https://www.cnblogs.com/zej87/p/7738895.html

Tomcat7/8开启WebDAV的支持

WebDAV是一种超文本传输协议,Tomcat默认是支持WebDAV的,且默认为禁用状态。 更多详细信息,请参考: https://zh.wikipedia.org/wiki/WebDAV http://www.webdav.org/ 开启步骤如下: 1、在Tomcat的webapps目录下新建webda…

算法复杂度分析(下)

前一篇文章算法复杂度分析(上)讲述了复杂度的大 O 表示法和几个分析原则,这篇文章我们来讲讲另外几种复杂度,最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst case t…

免费分享一些.NET Core比较优秀的社区资料和微软官方资料

这次小编所分享的这套笔记手册,主要是分享一些.NET Core比较优秀的社区资料和微软官方资料。已经把所有的重要知识点进行了完整的归类和整理,可以让大家更清晰和快速的学习.NET Core,不浪费任何多余的时间!全网首发!相…

python异或运算怎么算_小强学Python+OpenCV之-1.4.4掩膜mask及位运算(与、或、非、异或)...

问题引入在小强学PythonOpenCV之-1.4.2裁剪一节,我们使用的是numpy数组切片功能实现图片区域的裁剪。那么,如果我们想要裁剪图像中任意形状的区域时,应该怎么办呢?答案是,使用掩膜(masking)。但是这一节我们…

51 Nod 1670 打怪兽

1670 打怪兽lyk在玩一个叫做“打怪兽”的游戏。游戏的规则是这样的。lyk一开始会有一个初始的能量值。每次遇到一个怪兽,若lyk的能量值>怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束。若…

QQ协议调试器 QQDebugger

QQ协议老变,为了分析协议,单用抓包工具还是不够的,还是得需要很好的调试工具。在网上找了几个调试工具,易用性均欠佳,不得已自己开发了一个 QQDebugger,不敢专美,特意发布出来。QQDebugger 在功…

PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.5. 修改表

5.5. 修改表 5.5.1. 增加列5.5.2. 移除列5.5.3. 增加约束5.5.4. 移除约束5.5.5. 更改列的默认值5.5.6. 修改列的数据类型5.5.7. 重命名列5.5.8. 重命名表当我们已经创建了一个表并意识到犯了一个错误或者应用需求发生改变时,我们可以移除表并重新创建它。但如果表中…

Uptime-Kuma 一个轻量的开源监控工具

点击蓝字 关注我们你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,有用的工具,不要忘记关注。今天给大家介绍一个开源的监控工具 Uptime Kuma, 主要用来监控 Web 以及网络, 和 Prometheus 相比, 它是轻量的, Uptime Kuma 是基于…

怎么查看mysql正在运行的语句_MySQL如何查询当前正在运行的SQL语句

通过status命令,查看Slow queries这一项,如果值长时间>0,说明有查询执行时间过长以下为引用的内容:mysql> status;--------------mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386)Connection id: 53Current database: (n…

SpringBoot实战之SpringBoot自动配置原理

SpringBoot 自动配置主要通过 EnableAutoConfiguration, Conditional, EnableConfigurationProperties 或者 ConfigurationProperties 等几个注解来进行自动配置完成的。EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryName…

Install OpenCV-Python in Ubuntu

之前安装python版opencv,需要下载whl文件,进行安装,这是在window环境下的:安装opencv_python,下载whl包安装系统python下的opencv 今天发现一个简单的方法。Install OpenCV-Python in UbuntuInstall package python-opencv with f…

如何健康地跑步?

最近某司高管跑步 28 公里后猝死,被各大媒体报道,每次这种悲剧发生,而且还跟跑步扯上关系,总是让人心痛。通过报道了解到,这位高管酷爱跑马拉松,身体素质和运动能力肯定是强于普通人的,但还是遭…

项目共享协调机制

API,协调前端与后端开发的连接点。 面临几个问题 1. API更新不及时,导致前端开发的接口没有及时更新而出现各种问题。 2. 文档描述得不准确 3. 没有统一的标准。 我们可以使用swagger editor, swagger ui。第一是编辑器,第二个是展…

vs2008C1902程序数据库管理不匹配

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了。如图

mysql user表 空_mysql 忘记密码,重置密码,mysql.user表为空的解决办法

一、用户表有用户,直接修改密码ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)修改mysql配置文件my.cnf:vim /etc/my.cnf在[mysqld]中添加skip-grant-tables重启mysql服务,用空密码直接登录,查…

链式封装与调用

var CheckObject function(){}; CheckObject.prototype function(){checkName:function(){// codereturn this;},checkEmail:function(){// code return this;},checkPassword:function(){// codereturn this;} } //使用 var Check new CheckObject() Check.checkName().che…

全新升级的AOP框架Dora.Interception[3]: 基于特性标注的拦截器注册方式

在Dora.Interception中按照约定方式定义的拦截器可以采用多种方式注册到目标方法上。本篇文章介绍最常用的基于“特性标注”的拦截器注册方式,下一篇会介绍另一种基于(Lambda)表达式的注册方式:全新升级的AOP框架Dora.Interceptio…

在惨遭勒索病毒攻击之后,微软呼吁重新制定“数字日内瓦公约”

基于美国安全局泄露文档开发的病毒程序成为上周的主要新闻,该病毒导致全世界大量的Windows电脑瘫痪。WannaCry勒索病毒在150个国家有20万个受害者,包括英国的医院、西班牙的基础设施部门和俄罗斯的内政部。Renault在受到攻击之后关闭了几家在法国境内的工…

【代码审计】PHP代码审计---基础记录

PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种。 * file:// — 访问本地文件系统 * http:// — 访问 HTTP(s) 网址 * ftp:// — 访问 FTP(s) URLs * php:// — 访问各个输入/输出流(I/O streams) * zlib:// — 压…