美文网首页
【mysql】实现行列转置

【mysql】实现行列转置

作者: 禟小九 | 来源:发表于2018-08-17 18:20 被阅读0次
背景

记得很早之前做过一家公司的sql笔试题,其中有一道题大致是这样,给一个表,让统计各个家具当月的销售总数量,然后显示成下图的形式。当时对mysql还了解不深我看到该题时心想是不是出题之人把行列搞错了,最后还是坚持自己的想法横向显示了。事后一查才发现自己见识如此之少,一阵惭愧,当然这都是后话了。虽然这次的总结很简单,但确是初学者不容易想到的点,即便自己对这块已经很熟悉了,但还是要警示自己,学无止境,要吸取教训,不断学习。下面以用户登录终端为例来开启我们今天的分享吧~


image.png
技术与实现
  • 目标
    输出5月份各终端用户登录次数,展示结果如下图:


    image.png
  • 表结构

CREATE TABLE `user_login_log` (
  `logid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `userid` int(10) unsigned NOT NULL COMMENT '帐号ID,参考T6110.F01',
  `login_time` datetime NOT NULL COMMENT '登录时间',
  `login_ip` varchar(20) DEFAULT NULL COMMENT '登录IP',
  `loginSource` enum('IOS','Android','H5','HYB','IOS_PRO','H5_WXFWH','PC') DEFAULT NULL COMMENT '登录来源',
  `sourceVersion` varchar(1000) DEFAULT NULL COMMENT '来源版本',
  `useVersion` varchar(20) DEFAULT NULL COMMENT '使用版本',
  `logStatus` int(10) DEFAULT '0' COMMENT '日志状态(0:成功,1:失败)',
  `deviceID` varchar(100) DEFAULT NULL COMMENT '设备ID',
  PRIMARY KEY (`logid`),
  KEY `user_login_uid` (`userid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11961594 DEFAULT CHARSET=utf8 COMMENT='用户登录日志';
  • 实现
    SELECT
        sum(case when loginSource='PC' then c end) as 'PC',
        sum(case when loginSource='H5' or loginSource='H5_WXFWH' then c end) as 'H5',
        sum(case when loginSource='IOS' or loginSource='IOS_PRO' then c end) as 'IOS',
        sum(case when loginSource='Android' then c end) as'Android'
    from (
        SELECT loginSource,COUNT(1)c from user_login_log 
        where loginSource is not null 
        and DATE_FORMAT(login_time,'%Y-%m')='2018-05'
        GROUP BY loginSource
    ) temp1
  • 结果


    image.png

相关文章

  • 【mysql】实现行列转置

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

  • MySQL 行列转置

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

  • 线性代数-行列式性质

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

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

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

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

    行列转置的小脚本

  • 行列式

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

  • excel行列转置

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

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

  • Bash awk 实现行列转换

    诸如行列转换、行列式转置的算法,放在python或C语言中,完全可用二维数组实现,如果用shell,awk更方便 ...

  • Learn_for_Numpy

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

网友评论

      本文标题:【mysql】实现行列转置

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