sql语句中使用临时表
目录
一、临时表实现分步处理
1.概述
2.实例
2.1表格结构
2.2需求
2.3sql语句
2.4sql语句解析
二、临时表实现分层处理
1、概述
2、实例
2.1表结构
2.2需求
2.3sql语句
2.4sql语句解析
一、临时表实现分步处理
1.概述
当需要的结果需要经过多次处理后才能最终得到我们需要的结果时,就可以使用临时表,这里临时表就起到了一个中间处理的作用,实现了分步处理,简化了问题。
2.实例
2.1表格结构
pln_order_pool_detail(表名)
2.2需求
需要得到订单平均交付周期、最大交付周期、最小交付周期,为了实现这一需求,首先我们要求出每个订单的交付周期,其次我们需要将这些订单的交付周期求其平均值。
2.3sql语句
SELECTAVG( leadTime ) avgLeadTime,MAX( leadTime ) maxLeadTime,MIN( leadTime ) minLeadTime
FROM( SELECT DATEDIFF(reality_deliver_time,create_time) AS leadTime FROM pln_order_pool WHERE order_state = 'finish' ) a
2.4sql语句解析
其中 SELECT DATEDIFF(reality_deliver_time,create_time) AS leadTime FROM pln_order_pool WHERE order_state = 'finish' 是求出每个订单的交付周期作为临时表,每个订单的交付周期即状态(order_state)为'finish'的订单的实际交付时间(reality_deliver_time)减去该订单的创建时间(create_time)
DATEDIFF(reality_deliver_time,create_time):该函数表示实际交付日期(reality_deliver_time)与创建日期(create_time)的间隔,且结果是以天数进行返回
AVG( leadTime ):将临时表中的交付周期通过AVG函数求出平均交付周期
MAX( leadTime):将临时表中的交付周期通过MAX函数求出最大交付周期
MIN( leadTime):将临时表中的交付周期通过MIN函数求出最小交付周期
二、临时表实现分层处理
1、概述
在实际开发中经常会碰到一个字段下存储的结果不同,而我又需要对这两个结果进行处理得到最终的结果,此时如果没有临时表我们就可能需要写两个sql语句分别得到结果,然后在后端进行运算得到最终需要的结果。
2、实例
也许上面的概述表述并不清楚,现在用一个实例来说明。
像这样的一个表结构,我想要计算2022年8月9号这一天的计划完成率,那就需要计算该日期的计划数和计划完成数的比值,也就是计算该日期的实出对应的数量与该日期的计划对应的数量的比值,但是上面的表结构中计划与实出都在type一个字段下,我又该如何将where条件设置为type等于“计划”求出计划数,同时又将where条件设置为type等于“实出”求出实际完成的数量呢?
2.1表结构
plan(表名)
2.2需求
求出2022年8月9号一天的计划完成率
2.3sql语句
SELECTplanNums,finishNums,IFNULL( ROUND( finishNums / planNums * 100, 2 ), 0 ) finishRate
FROM( SELECT SUM( num ) planNums FROM plan WHERE type = '计划' AND date = '2022-08-09') a,( SELECT SUM( num ) finishNums FROM plan WHERE type = '实出' AND date = '2022-08-09') b
2.4sql语句解析
针对上述的问题,我们使用临时表就可以完美的解决,根据条件的不同我们建立两个临时表,分别记录当天的计划总数和当天的实际完成的数量,实现分层处理,最后我们再将临时表中的数据进行运算就可以得到当天的计划完成率。
SELECT SUM( num ) planNums FROM plan WHERE type = '计划' AND date = '2022-08-09'
此句求出2022年8月9号的计划总数临时表
SELECT SUM( num ) finishNums FROM plan WHERE type = '实出' AND date = '2022-08-09'
此句求出2022年8月9号的实际完成总数临时表
IFNULL(ROUND(finishNums/planNums*100,2),0):此函数用于排除临时表中计划总数为null的情况,若ROUND(finishNums/planNums*100,2)为空,则返回值为0,否则返回值就是ROUND(finishNums/planNums*100,2)
ROUND(finishNums/planNums*100,2):此函数为四舍五入函数,将finishNums/planNums*100计算的结果保留两位小数
注意:临时表一定需要起别名,否则就会报错
sql语句中使用临时表相关推荐
- SQL语句中的select高级用法
#转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...
- sql语句中使用函数会耗费性能吗_挽救数据库性能的 30 条黄金法则 | 原力计划...
作者 | geekguy 责编 | 王晓曼 出品 | CSDN博客 1. 优化查询,应尽量避免全表扫描,应该在用于检索数据和排序数据的字段上建立索引,如where子句用于搜索,order by子句用于 ...
- SQL语句中explain各字段含义
SQL语句中explain各字段含义 1 id: 2 select_type 3 type 4 table 5 possible_keys 6 Key key列显示MySQL实际决定使用的键(索引) ...
- sql语句中的on和where的区别
sql语句中的on和where都是表示搜索条件. 在sql中有三种连接查询, cross join,inner join,和outer join 其中 cross join 和 inner join ...
- sql语句中的case语句
sql语句中的case语句与高级语言中的switch语句,是标准sql的语法,适用于一个条件判断有多种值的情况下分别执行不同的操作. 首先,让我们看一下CASE的语法.在一般的SELECT中,其语法格 ...
- sql语句中left join和inner join中的on与where的区别分析
原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用 ...
- oracle修改表结构的sql命令是什么,sql语句中修改表结构的命令是什么?
sql语句中修改表结构的命令是:"ALTER TABLE"命令. ALTER TABLE 语句用于在已有的表中添加.删除或修改列. SQL ALTER TABLE 语法 如需在表中 ...
- Sql 语句中 IN 和 EXISTS
原文链接: (2条消息)Sql 语句中 IN 和 EXISTS 的区别及应用 - jcpp9527的博客 - CSDN博客 https://blog.csdn.net/wqc19920906/art ...
- SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别
原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...
最新文章
- Memcache压力测试工具 -- memslap
- 2018春季德国第八届工业4.0考察之旅正式启航
- 基本概念_程序员基本功——链表的基本概念
- 笔记本电池电量校正方法(转CSDN)
- 不生成Android Dependencies
- Vue.js 极简小例:数值计算、千米换算为米、九九乘法表、循环
- nfc加密卡pm3和pm5区别_小米手环4/5 NFC添加加密门禁
- 查看python数据的属性
- 从头到尾谈一下HTTPS
- 全国计算机二级个考生自定义,全国计算机二级考试《C++》强化试题及答案
- 地面波天线怎样能多收台_教你怎样挑选DTMB地面波天线
- BAT病毒-让电脑快速蓝屏
- TQFP 和LQFP 器件的焊接方法
- win7显示器双屏显示怎么设置
- curl调用接口方法
- 做生意要顺势而为,但不是盲目跟风
- java判断文件夹中的图片是否重复
- linux igmp 属于那层协议,igmp协议属于哪一层
- XX大学学生选课系统需求规格说明书
- 李嘉诚人生最大的错误,并非错过阿里华为,而是套现中国投资欧洲
热门文章
- OCI、CRI、CNI、CSI规范在kubernetes项目体系里的关系
- 1655_MIT 6.828 JOS存储分页映射的实现分析
- 超级好用的在线流程图、脑图、UML制作工具ProcessOn
- C语言实现BP神经网络并检测手写数字
- USB存储设备(如:U盘,移动硬盘)
- linux中rpm.bin文件与bin文件的区别
- 数据结构之树的详解汇总
- micropython esp32驱动舵机_乐鑫ESP32-PCA9685舵机控制板与MicroPython-ESP32-电路城论坛 - 电子工程师学习交流园地...
- 「经验分享」plantsimulation生产系统仿真教程利用率和MTTR模拟
- 基于MATLAB机器视觉的水果分级检测系统的设计