sql语句中临时表使用实例详解(sql临时数据库)怎么可以错过

随心笔谈11个月前发布 admin
86 0



目录一、临时表实现分步处理1.概述2.实例2.1表格结构2.2需求2.3sql语句2.4sql语句解析二、临时表实现分层处理1、概述2、实例2.1表结构2.2需求2.3sql语句2.4sql语句解析

当需要的结果需要经过多次处理后才能最终得到我们需要的结果时,就可以使用临时表,这里临时表就起到了一个中间处理的作用,实现了分步处理,简化了问题。

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函数求出最小交付周期

在实际开发中经常会碰到一个字段下存储的结果不同,而我又需要对这两个结果进行处理得到最终的结果,此时如果没有临时表我们就可能需要写两个sql语句分别得到结果,然后在后端进行运算得到最终需要的结果。

也许上面的概述表述并不清楚,现在用一个实例来说明。

像这样的一个表结构,我想要计算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临时表使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:sql server创建临时表的两种写法和删除临时表sqlserver通用的删除服务器上的所有相同后缀的临时表sql server 临时表 查找并删除的实现代码SQLSERVER 临时表和表变量的区别汇总MySQL中临时表的基本创建与使用教程sql的临时表使用小结MySQL中关于临时表的一些基本使用方法SQL Server临时表的正确删除方式(sql server 删除临时表)

© 版权声明

相关文章