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

随心笔谈9个月前发布 admin
201 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

文章主要介绍了使用SQL临时表来简化复杂查询的处理方式,突出分步处理的技巧及其优势。文章通过两个实际场景来说明临时表的应用:一是计算订单交付周期(平均值、最大值、最小值),二是计算计划完成率。 在第一部分,文章详细描述了如何利用临时表将复杂查询分解为多个步骤,分别计算每个订单的交付周期,并通过SUM、AVG、MAX、MIN等聚合函数获得最终结果。例如,通过子查询生成临时表,存储每个订单的交付周期,然后在主查询中计算平均值、最大值和最小值,而不是直接在原始表上进行多次查询。 在第二部分,文章针对同一字段中同时存储计划数和实出数的情况,展示了如何通过临时表实现分层处理。通过分别生成两个临时表(计划总数和实出总数),避免直接处理原始表的复杂性,最后通过简单的四舍五入计算得到计划完成率。文章还强调了临时表别名的必要性,以及使用IFNULL函数处理可能的空值问题。 整体来看,文章突出了临时表在简化查询、提升效率方面的优势,并通过具体的实例详细说明了其使用方法和注意事项。



目录一、临时表实现分步处理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 删除临时表)

© 版权声明

相关文章