mysql中行列转换(mysql 行列转换的示例代码)
类别:数据库 浏览量:397
时间:2021-10-21 07:09:41 mysql中行列转换
mysql 行列转换的示例代码一、需求
我们有三张表,我们需要分类统计一段时间内抗生素的不同药敏结果,即 report_item_drugs 表的 drugs_result, 在不同项目project_name 和不同抗生素 antibiotic_dict_name 下的占比,并将药敏结果显示在行上,效果如下:
三张原始表(仅取需要的字段示例),分别是:
报告表
项目表
抗生素表(药敏结果drugs_result为一列值)
二、实现
1、按照项目、抗生素分组求出检出的总数
|
select a.project_name,a.antibiotic_dict_name, sum (nums) as 检出总数 from ( select i.project_name,d.antibiotic_dict_name,d.drugs_result, count (d.id) as nums from `report` r right join report_item i on r.id=i.report_id right join report_item_drugs d on d.report_item_id=i.id where r.report_status=2 and r.add_date between '2020-01-01' and '2020-12-30' group by i.project_id,d.antibiotic_dict_id,d.drugs_result ) a group by a.project_name,a.antibiotic_dict_name |
2、按照项目、抗生素、药敏结果求出不同药敏结果数量
|
select i.project_name,d.antibiotic_dict_name,if(d.drugs_result<> '' , d.drugs_result, '未填写' ) as drugs_result, count (d.id) as 数量 from `report` r right join report_item i on r.id=i.report_id right join report_item_drugs d on d.report_item_id=i.id where r.report_status=2 and r.add_date between '2020-01-01' and '2020-12-30' group by i.project_id,d.antibiotic_dict_id,d.drugs_result |
3、将两个结果关联到一起
|
select bb.project_name,bb.antibiotic_dict_name,bb.drugs_result,bb.`数量`,aa.`检出总数` from ( select a.project_name,a.antibiotic_dict_name, sum (nums) as 检出总数 from ( select i.project_name,d.antibiotic_dict_name,d.drugs_result, count (d.id) as nums from `report` r right join report_item i on r.id=i.report_id right join report_item_drugs d on d.report_item_id=i.id where r.report_status=2 and r.add_date between '2020-01-01' and '2020-12-30' group by i.project_id,d.antibiotic_dict_id,d.drugs_result ) a group by a.project_name,a.antibiotic_dict_name ) aa right join ( select i.project_name,d.antibiotic_dict_name,if(d.drugs_result<> '' , d.drugs_result, '未填写' ) as drugs_result, count (d.id) as 数量 from `report` r right join report_item i on r.id=i.report_id right join report_item_drugs d on d.report_item_id=i.id where r.report_status=2 and r.add_date between '2020-01-01' and '2020-12-30' group by i.project_id,d.antibiotic_dict_id,d.drugs_result )bb on aa.project_name=bb.project_name and aa.antibiotic_dict_name=bb.antibiotic_dict_name where aa.`检出总数`<> '' |
4、一般来说,到上一步不同药敏数量和总数都有了,可以直接求比例了
但是,我们需要的是将药敏显示到行上,直接求比不符合需求,所以我们需要将列转换为行
我们借助于case when实现行列转换,并将药敏结果根据字典转为方便阅读的汉字
|
select c.project_name 项目名称,c.antibiotic_dict_name 抗生素名称,c.`检出总数`, sum ( case c.`drugs_result` when 'd' then c.`数量` else 0 end ) as '剂量依赖性敏感' , concat( sum ( case c.`drugs_result` when 'd' then format(c.`数量`/c.`检出总数`*100,2) else 0 end ), '%' ) as '剂量依赖性敏感比率' , sum ( case c.`drugs_result` when 'r' then c.`数量` else 0 end ) as '耐药' , concat( sum ( case c.`drugs_result` when 'r' then format(c.`数量`/c.`检出总数`*100,2) else 0 end ), '%' ) as '耐药比率' , sum ( case c.`drugs_result` when 's' then c.`数量` else 0 end ) as '敏感' , concat( sum ( case c.`drugs_result` when 's' then format(c.`数量`/c.`检出总数`*100,2) else 0 end ), '%' ) as '敏感比率' , sum ( case c.`drugs_result` when 'i' then c.`数量` else 0 end ) as '中介' , concat( sum ( case c.`drugs_result` when 'i' then format(c.`数量`/c.`检出总数`*100,2) else 0 end ), '%' ) as '中介比率' , sum ( case c.`drugs_result` when 'n1' then c.`数量` else 0 end ) as '非敏感' , concat( sum ( case c.`drugs_result` when 'n1' then format(c.`数量`/c.`检出总数`*100,2) else 0 end ), '%' ) as '非敏感比率' , sum ( case c.`drugs_result` when 'n' then c.`数量` else 0 end ) as '无' , concat( sum ( case c.`drugs_result` when 'n' then format(c.`数量`/c.`检出总数`*100,2) else 0 end ), '%' ) as '无比率' , sum ( case c.`drugs_result` when '未填写' then c.`数量` else 0 end ) as '未填写' , concat( sum ( case c.`drugs_result` when '未填写' then format(c.`数量`/c.`检出总数`*100,2) else 0 end ), '%' ) as '未填写比率' from ( select bb.project_name,bb.antibiotic_dict_name,bb.drugs_result,bb.`数量`,aa.`检出总数` from ( select a.project_name,a.antibiotic_dict_name, sum (nums) as 检出总数 from ( select i.project_name,d.antibiotic_dict_name,d.drugs_result, count (d.id) as nums from `report` r right join report_item i on r.id=i.report_id right join report_item_drugs d on d.report_item_id=i.id where r.report_status=2 and r.add_date between '2020-01-01' and '2020-12-30' group by i.project_id,d.antibiotic_dict_id,d.drugs_result ) a group by a.project_name,a.antibiotic_dict_name ) aa right join ( select i.project_name,d.antibiotic_dict_name,if(d.drugs_result<> '' , d.drugs_result, '未填写' ) as drugs_result, count (d.id) as 数量 from `report` r right join report_item i on r.id=i.report_id right join report_item_drugs d on d.report_item_id=i.id where r.report_status=2 and r.add_date between '2020-01-01' and '2020-12-30' group by i.project_id,d.antibiotic_dict_id,d.drugs_result )bb on aa.project_name=bb.project_name and aa.antibiotic_dict_name=bb.antibiotic_dict_name where aa.`检出总数`<> '' ) c group by c.project_name,c.antibiotic_dict_name; |
5、查看结果,成功转换
到此这篇关于mysql 行列转换的示例代码的文章就介绍到这了,更多相关mysql 行列转换内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/kk_gods/article/details/111933336
您可能感兴趣
- 如何查找MySQL中查询慢的SQL语句
- mysql中的默认mysql数据库作用(MySQL安装后默认自带数据库的作用详解)
- mysql显示所有数据库语句(MySQL数据库自动补全命令的三种方法)
- mysql密码找回方法(MySQL8忘记密码的快速解决方法)
- mysql数据库事务处理(MySQL数据库事务与锁深入分析)
- 织梦源码安装数据库怎么填(Mysql修改端口号 织梦DedeCMS设置教程)
- mysql的日志怎么清除(MySQL删除了记录不生效的原因排查)
- mysql怎么设置某个字段默认值(MySQL表字段时间设置默认值)
- mysql哪个版本可以下载msi(新手必备之MySQL msi版本下载安装图文详细教程)
- mysql索引的比较规则(MySQL的Flush-List和脏页的落盘机制)
- mysql数据表怎么复制(MySQL 复制表的方法)
- mysql游标的使用(MySQL 游标的作用与使用相关)
- mysql按端口查找配置(MySQL中给定父行找到所有子行的解决方案)
- mac更改mysql密码(Mac下mysql 8.0.22 找回密码的方法)
- mysql数值类型图解(详解mysql持久化统计信息)
- MYSQL字符集设置的方法详解(终端的字符集)(MYSQL字符集设置的方法详解终端的字符集)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
- 今日菜价 椰菜涨幅最高 3.25 ,水空心菜降幅最高 2.58(今日菜价椰菜涨幅最高)
- 今日菜价 红三鱼涨幅最高 4.41 ,黄鳝降幅最高 5.06(红三鱼涨幅最高)
- 今日菜价 西生菜涨幅最高 6.19 ,生菜降幅最高 5.38(西生菜涨幅最高)
- 今日菜价 青豆角涨幅最高 0.70 ,菜心降幅最高 5.55(青豆角涨幅最高)
- 农村植物,龙芽草若长在您家路旁,请珍惜,它对抗癌有特效(龙芽草若长在您家路旁)
热门推荐
- mysql的分页原理(mysql分页的limit参数简单示例)
- mysql的count知识(MySQL中MTR的概念)
- sqlserver判断条件输出字符(SQL Server查询条件IN中能否使用变量的示例详解)
- 如何提高织梦dedecms的安全性(织梦DedeCms上flash彩色标签云tag的实现方法)
- linux内核从原理到代码详解(探究一个LED如何入门Linux内核)
- css3旋转动画教学(css3动画效果抖动解决方法)
- 织梦自定义表单怎么设置数据(让织梦artlist标签增加notypeid属性实现栏目过滤)
- 解释mysql慢查询(MySQL Threads_running飙升与慢查询的相关问题解决)
- tomcat运行中找不到路径(Tomcat将配置文件放在外部的解决方法)
- css垂直居中图解(全面总结使用CSS实现水平垂直居中效果的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9