建立测试表:

DROP TABLE IF EXISTS `my_test_2017_03_29`;

CREATE TABLE `my_test_2017_03_29` (

`id` int(11) NOT NULL,

`event_name` varchar(255) DEFAULT NULL,

`dt` date DEFAULT NULL,

`ev` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `my_test_2017_03_29` VALUES ('1', 'pc_detail_a', '2017-03-29', '9');

INSERT INTO `my_test_2017_03_29` VALUES ('2', 'pc_detail_b', '2017-03-28', '7');

INSERT INTO `my_test_2017_03_29` VALUES ('3', 'pc_detail_c', '2017-03-27', '4');

INSERT INTO `my_test_2017_03_29` VALUES ('4', 'pc_detail_a', '2017-03-30', '2');

原始数据:

id

event_name

dt

ev

1

pc_detail_a

2017-03-29

9

2

pc_detail_b

2017-03-28

7

3

pc_detail_c

2017-03-27

4

4

pc_detail_a

2017-03-30

2

需要转置为:

pc 点击埋点

2017-03-27

2017-03-28

2017-03-29

2017-03-30

pc_detail_a

0

0

9

2

pc_detail_b

0

7

0

2

pc_detail_c

4

0

0

0

合计

4

7

9

2

即:将 事件名(event_name)作为纵向表头,日期(dt)作为横向表头。

SQL 语句如下:

SET @EE=(

-- 将多行的sum(if)拼接为一行,因为SET @xx要求SELECT结果为一行。

SELECT GROUP_CONCAT(LEFT(dt_stmt, LENGTH(dt_stmt) - 1))

FROM (

-- 拼接上sum(if)

SELECT CONCAT('SUM(IF(dt=\'', dt, '\'', ', ev, 0)) AS \'', dt, '\',') dt_stmt

FROM (

-- 查出所有的日期,升序排列

SELECT DISTINCT dt FROM my_test_2017_03_29 ORDER BY dt ASC

) nil

) nil2

);

SET @QQ=CONCAT(

'SELECT ifnull(event_name,\'合计\') as \'pc 点击埋点\',',

@EE,

' FROM my_test_2017_03_29 GROUP BY event_name WITH ROLLUP'

);

-- 你可以用以下命令查看动态生成的SQL语句:

-- SELECT @EE;

-- SELECT @QQ;

PREPARE stmt2 FROM @QQ;

EXECUTE stmt2;

DEALLOCATE PREPARE stmt2;

mysql 列转置_MySQL 行列转置相关推荐

  1. mysql 列转置_MySQL行列转置方法

    数据样本: create table tx( id int primary key, c1 char(2), c2 char(2), c3 int ); insert into tx values ( ...

  2. mysql 列合并_mysql 列转行,合并字段的方法(必看)

    数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case course when '语文' then score else 0 end) ---判断 a ...

  3. mysql 转置 动态_MySQL 行列转置

    建立测试表: DROP TABLE IF EXISTS `my_test_2017_03_29`; CREATE TABLE `my_test_2017_03_29` ( `id` int(11) N ...

  4. mysql列别_MySQL基础及CRUD

    大纲 1. 数据库的基本概念 2. MySQL数据库软件 1. 安装 2. 卸载 3. 配置 3. SQL 1) DDL(Data Definition Language)数据定义语言 2) DML( ...

  5. mysql列增减_Mysql基本操作——增减改查

    1 创建数据库:两种方法: create database my_db; createdatabase if not exists my_db; 2 删除数据库:两种方法: drop database ...

  6. mysql 列显示出来_MySQL 显示列

    MySQL 显示列 表中的列是一系列可以存储文本,数字和图像的单元格.每一列为表中的每一行存储一个值.当我们使用MySQL服务器时,通常会显示特定表中的列信息.在本节中,我们将讨论如何在现有表中显示或 ...

  7. mysql列目录_mysql列直接存储图片路径

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. mysql列偏移_MySQL:如何对待分布偏移的数据

    --- 作者微信:gp_22389860 --- btr_estimate_n_rows_in_range_low 函数用于非唯一访问的行数评估也就是在执行计划生成阶段会去访问实际的数据,尽可能的得到 ...

  9. mysql 列连接_mysql – 将一个表中的多个列连接到另一个...

    我正在尝试学习如何将一个表中的多个列连接到另一个表中的单个列. 这是我最简单形式的表结构: 球队 id | team_name | 1 | teamA | 2 | teamB | 3 | teamC ...

最新文章

  1. 7 个小仙女花3年时间写了一本1200页的机器学习算法手册(限时开放下载)
  2. 享学金三银四一线大厂面试专题学习笔记
  3. vue.js 动态添加组件
  4. sqlserver2008登录sa失败
  5. 七牛云智能日志管理平台正式发布
  6. java jsonobject 转对象_解析JSON中JSONObject的高级使用
  7. 敏捷实践:比每日会议更疯狂的半日会议!
  8. DefaultIfEmpty
  9. python 自动交易_Python自动化交易入门
  10. 路由器tomato固件上搭建svn
  11. 网络编程中,同步传输和异步传输有什么区别
  12. vconsole 轻松实现移动端调试
  13. 一文解密 Netflix 的快速事件通知系统是如何工作的
  14. Linux下安装GitHub
  15. 人工智能时代,最容易被人工智能取代的职位是什么
  16. VR全景电子商务方案/APP/小程序/公众号/网站
  17. 澎思科技完成A轮1.5亿元融资,360、富士康等联合投资
  18. logisim实验五:汉字字库存储芯片扩展实验
  19. “飞思卡尔”杯智能车设计与实践
  20. 机械大专生能学会云计算吗,完全零基础的

热门文章

  1. oracle db_files,如何解决 Oracle 中 DB_FILES 限制引起的 ORA-00059 问题
  2. 用文件fw读写链表_用FORTRAN95写的sgy文件读写程序
  3. 三国志幻想大陆服务器维护,三国志幻想大陆8月14日更新维护公告
  4. 职教云python题和答案_智慧职教云课堂Python程序设计题目答案
  5. 一项无聊的研究与论文,导致整个大学被Linux封杀!
  6. 每日一皮:所以重点到底是啥...
  7. 每日一皮:程序员职业服装!
  8. 大学计算机课算绩点吗,南京大学GPA是如何计算的
  9. linux 公私钥生成,[c++,openssl,RSA] linux下编程实现生成公私钥对_1
  10. Linux dn命令大全,linux命令大全完整版.doc