zoukankan      html  css  js  c++  java
  • [SQL]行列转换

    行转列

    今天做项目的时候遇到了一个新需求,要求做统计接口的时候显示为:{类别名称:总数}

    之前做的显示效果是:

    {

    ​ “类别” : 类别名称,

    ​ “总数” : 总数

    }

    一开始百思不得其解,后来有人发了篇博客给我,恍然大悟。看来sql还有很多我们不了解的东西。

    SELECT 
    SUM(IF(`teshuzouye_type`='1',1,0)) as '作业1',
    -- if语句相当于一个三目运算符
    -- teshuzouye_type是用来分类的字段
    -- 1 是用来求和的值,这里也可以写成字段名
    -- 0 是指如果求和字段为null则默认值为0
    SUM(IF(`teshuzouye_type`='2',1,0)) as '作业2',
    SUM(IF(`teshuzouye_type`='3',1,0)) as '作业3',
    SUM(IF(`teshuzouye_type`='4',1,0)) as '作业4'
    FROM qy_special_task;
    效果:
    +-------+-------+-------+-------+
    | 作业1 | 作业2  | 作业3 | 作业4  |
    +-------+-------+-------+-------+
    | 2     | 1     | 0     | 0     |
    +-------+-------+-------+-------+
    

    列转行

    建表语句:

    create table qy_special_task {
    	id varchar(20) not null,
    	enterprise_id varchar(20) comment '企业id',
    	teshuzouye_type varchar(20) comment '类型',
    	donghuotask_label varchar(20) comment '动火作业级别',
    	PRIMARY KEY(id)
    }ENGINE = INNODB DEFAULT CHARSET = utf8;
    

    列转行就是把comment放到每一行里面变成数据

    SELECT enterprise_id,'类型' AS type,teshuzouye_type AS T FROM qy_special_task
    UNION ALL
    SELECT enterprise_id,'动火作业级别' AS course,donghuotask_label AS T FROM qy_special_task
    ORDER BY enterprise_id;
    -- 1.对重复结果的处理:UNION会去掉重复记录,UNION ALL不会;
    
    -- 2.对排序的处理:UNION会排序,UNION ALL只是简单地将两个结果集合并;
    
    -- 3.效率方面的区别:因为UNION 会做去重和排序处理,因此效率比UNION ALL慢很多;
    效果:
    +-------------+----------------+---+
    | enterprise_id | type         | T |
    +-------------+----------------+---+
    | 111         | 类型           | 1 |
    | 111         | 动火作业级别    | 1 |
    | 222         | 类型           | 2 |
    | 222         | 动火作业级别    | 2 |
    | 333         | 类型           | 1 |
    | 333         | 动火作业级别    | 1 |
    +-------------+----------------+---+
    
  • 相关阅读:
    VSCode创建自定义代码段
    生命不息,折腾不止 ~ 旧PC改造之家庭影音
    万物互联之~网络编程基础篇
    PyCharm创建自定义代码段(JetBrains系列通用)
    VSCode设置Tab键为4个空格
    Jupyter-Notebook服务器自定义密码
    Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)
    centos下使用nohup
    在centos中创建nginx启动脚本
    查看centos中的用户和用户组
  • 原文地址:https://www.cnblogs.com/kylinbalck/p/15255465.html
Copyright © 2011-2022 走看看