sql语句中临时表使用实例详解
作者:机智大袁 发布时间:2024-01-15 22:39:11
一、临时表实现分步处理
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计算的结果保留两位小数
注意:临时表一定需要起别名,否则就会报错
来源:https://blog.csdn.net/m0_60845963/article/details/126246590
猜你喜欢
- 疫情数据程序源码// An highlighted blockimport requestsimport jsonclass epidemi
- Python3中sort方法是列表类型list的内置方法,使用sort方法对list排序会修改list本身,不会返回新的list。sort方
- 具体环境:Ubuntu 14.04 Python 2.7.6 Django 1.7.1 Virtualenv name:test Nginx
- facade模式,即门面模式,也称外观模式,这个模式的核心思想是使用facade对象为外部客户端提供一个统一的访问一组子系统的接口,即客户端
- 1.跨域原理1. 首先浏览器安全策略限制js ajax跨域访问服务器2. 如果服务器返回的头部信息中有当前域:// 允许 http://lo
- setTimeoutsetTimeout 语法例子用 setTimeout 来执行 function不断重复执行的 setTimeout设定
- 用扩展名判断文件格式非常简单,但是有可能是错误的。 jpeg文件有固定的文件头,其文件头的格式如下:Start Marker | JFIF
- 需求:写一个登录的程序,1、最多登陆失败3次2、登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束3、要检验输入是否为空,账号和密码不
- 你还没用 jQuery 写过导航菜单? 相信看到这些出色的jQuery导航菜单后,一定会为此而后悔没早点把 jQuery 应用到自己的Web
- 昨天有人在群里问图1的边框效果是否能实现。 边框效果图有人给出答案,需要嵌套一个元素实现。我当时粗粗写了个测试页面,但是时间太晚了,也没有细
- super 的工作原理如下:def super(cls, inst): mro = inst.__class__.mro() &
- 继续pygame实现俄罗斯方块游戏(AI篇1)的代码更新一、消除后才做评价上一篇我们是对方块落下的位置和落下后出来的空洞进行了评价,但是这些
- Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建 * 页的功能强大的服务器端脚本语言。许多ASP开发人
- 本文实例讲述了Python实现的自定义多线程多进程类。分享给大家供大家参考,具体如下:最近经常使用到对大量文件进行操作的程序以前每次写的时候
- 从2004年开始,我开始进入雅虎的异常表现小组。我们是一个很小的队伍,专门针对雅虎的产品进行质量检测和改进,我作为一个后端工程师,现在却开始
- 黑体是视觉设计师常用的一款字体,特别是针对广告的 Banner 等。根据 * 的相关介绍,有关黑体的定义可以认为:黑體与白体
- 在二维矩阵间的运算:class torch.nn.Conv2d(in_channels, out_channels, kernel_size
- 近日,有关微软Open XML标准的问题又引发了某些业内人士的关注。其一是因为日前ISO(国际标准组织)成员南非和巴西相继就ISO批准微软的
- 目的:设计一个应用GUI用于对比两个Excel文件思路1.参数同一个excel文件两个sheet页其中一个ODS(老数据),一个DWH(新数
- 引言vcf文件的全称是variant call file,即突变识别文件,它是基因组工作流程中产生的一种文件,保存的是基因组上的突变信息。通