sql语句中临时表使用实例详解

 更新时间:2023年02月16日 11:27:01   作者:机智大袁  
当需要的结果需要经过多次处理后才能最终得到我们需要的结果时,就可以使用临时表,这里临时表就起到了一个中间处理的作用,实现了分步处理,简化了问题,这篇文章主要介绍了sql语句中临时表使用方法,需要的朋友可以参考下

一、临时表实现分步处理

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临时表使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server序列SEQUENCE用法介绍

    SQL Server序列SEQUENCE用法介绍

    这篇文章介绍了SQL Server中序列SEQUENCE的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java 实现连接sql server 2000

    Java 实现连接sql server 2000

    JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,我也不知道是不是真的),而且现在的JDBC 3.0据Sun说也能访问Execel等电子表格程序!
    2009-06-06
  • SQLServer 2008 CDC功能实现数据变更捕获脚本

    SQLServer 2008 CDC功能实现数据变更捕获脚本

    这篇文章主要介绍了使用SQLServer 2008的CDC功能实现数据变更捕获的脚本,大家参考使用
    2013-11-11
  • 安装完成后如何找回SQL Server实例安装时的序列号

    安装完成后如何找回SQL Server实例安装时的序列号

    当我们需要再次安装sqlserver时,如何找回sqlserver实例安装时的序列号呢?下面,跟着脚本之家小编一起学习安装完成后如何找回SQL Server实例安装时的序列号,需要的朋友可以参考下
    2015-09-09
  • SQL Server 异地数据库每日同步作业操作图文详解

    SQL Server 异地数据库每日同步作业操作图文详解

    最近因为经常有攻击,所以考虑到网站的安全问题,所以多弄了几台服务器并实现数据库与文件每天同步,这里主要介绍了sqlserver数据的每天同步问题
    2024-04-04
  • SQL SERVER函数之深入表值函数的处理分析

    SQL SERVER函数之深入表值函数的处理分析

    本篇文章是对表值函数进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • ASP数据库编程SQL常用技巧

    ASP数据库编程SQL常用技巧

    ASP数据库编程SQL常用技巧...
    2006-09-09
  • 一文掌握SQL的 joins 语法

    一文掌握SQL的 joins 语法

    SQL JOIN是结合两个或多个表的数据的一种方式,INNER JOIN返回两表匹配的记录;LEFT JOIN返回左表所有记录及右表匹配记录;RIGHT JOIN返回右表所有记录及左表匹配记录;FULL JOIN返回两表中所有记录,无论是否匹配,这些JOIN类型有助于灵活查询和分析关系数据库中的数据
    2024-09-09
  • SQL Server数据库中伪列及伪列的含义详解

    SQL Server数据库中伪列及伪列的含义详解

    这篇文章主要给大家介绍了关于SQL Server数据库中伪列及伪列含义的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • SQLServer日期函数总结案例详解

    SQLServer日期函数总结案例详解

    这篇文章主要介绍了SQLServer日期函数总结案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09

最新评论