美文网首页
MySQL 行列转置

MySQL 行列转置

作者: 书SHU | 来源:发表于2017-03-29 15:44 被阅读536次

建立测试表:

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 行列转置

    建立测试表: 原始数据: 需要转置为: 即:将 事件名(event_name)作为纵向表头,日期(dt)作为横向表...

  • 线性代数-行列式性质

    D === 一、转置行列式:将D的行列互换()得到为D的转置行列式 ==== 性质一、行列式与它的转置行列式相等,...

  • 【mysql】实现行列转置

    背景 记得很早之前做过一家公司的sql笔试题,其中有一道题大致是这样,给一个表,让统计各个家具当月的销售总数量,然...

  • 【行列式】4、行列式的性质

    转置行列式 则转置行列式为 性质一: 行列式的值等于转置行列式的值 证明:转置行列式是第一行变第一列,第二行变第二...

  • perl 小工具 -- 行列转置小脚本

    行列转置的小脚本

  • 行列式

    1. n阶行列式定义 2. 行列式性质 行列式与它的转置行列式相等。转置行列式 对换行列式的俩行(列),行列式变...

  • excel行列转置

  • 线性代数(5) 行列式的性质

    行列式转置 所谓转置就是把原来的行做成列就是转置的操作。转置符号就是用上标 T,矩阵的转置也是这样表示。有关转置在...

  • Learn_for_Numpy

    数组转置和交换轴 转置 矩阵的行列交换 1. numpy.where (x if condition else ...

  • hive sql 行列转置

    最近在做大数据的建模遇到的个需求,需要将行转置列,记录下。 如上图,将datatime相同的多行变成一行数据,效果...

网友评论

      本文标题:MySQL 行列转置

      本文链接:https://www.haomeiwen.com/subject/stzeottx.html