目录
一、临时表实现分步处理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语句
SELECT AVG( 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语句
SELECT planNums, 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临时表使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
关键词:
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?