sql語句中臨時(shí)表使用實(shí)例詳解
一、臨時(shí)表實(shí)現(xiàn)分步處理
1.概述
當(dāng)需要的結(jié)果需要經(jīng)過多次處理后才能最終得到我們需要的結(jié)果時(shí),就可以使用臨時(shí)表,這里臨時(shí)表就起到了一個(gè)中間處理的作用,實(shí)現(xiàn)了分步處理,簡(jiǎn)化了問題。
2.實(shí)例
2.1表格結(jié)構(gòu)
pln_order_pool_detail(表名)
2.2需求
需要得到訂單平均交付周期、最大交付周期、最小交付周期,為了實(shí)現(xiàn)這一需求,首先我們要求出每個(gè)訂單的交付周期,其次我們需要將這些訂單的交付周期求其平均值。
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' 是求出每個(gè)訂單的交付周期作為臨時(shí)表,每個(gè)訂單的交付周期即狀態(tài)(order_state)為'finish'的訂單的實(shí)際交付時(shí)間(reality_deliver_time)減去該訂單的創(chuàng)建時(shí)間(create_time)
DATEDIFF(reality_deliver_time,create_time):該函數(shù)表示實(shí)際交付日期(reality_deliver_time)與創(chuàng)建日期(create_time)的間隔,且結(jié)果是以天數(shù)進(jìn)行返回
AVG( leadTime ):將臨時(shí)表中的交付周期通過AVG函數(shù)求出平均交付周期
MAX( leadTime):將臨時(shí)表中的交付周期通過MAX函數(shù)求出最大交付周期
MIN( leadTime):將臨時(shí)表中的交付周期通過MIN函數(shù)求出最小交付周期
二、臨時(shí)表實(shí)現(xiàn)分層處理
1、概述
在實(shí)際開發(fā)中經(jīng)常會(huì)碰到一個(gè)字段下存儲(chǔ)的結(jié)果不同,而我又需要對(duì)這兩個(gè)結(jié)果進(jìn)行處理得到最終的結(jié)果,此時(shí)如果沒有臨時(shí)表我們就可能需要寫兩個(gè)sql語句分別得到結(jié)果,然后在后端進(jìn)行運(yùn)算得到最終需要的結(jié)果。
2、實(shí)例
也許上面的概述表述并不清楚,現(xiàn)在用一個(gè)實(shí)例來說明。
像這樣的一個(gè)表結(jié)構(gòu),我想要計(jì)算2022年8月9號(hào)這一天的計(jì)劃完成率,那就需要計(jì)算該日期的計(jì)劃數(shù)和計(jì)劃完成數(shù)的比值,也就是計(jì)算該日期的實(shí)出對(duì)應(yīng)的數(shù)量與該日期的計(jì)劃對(duì)應(yīng)的數(shù)量的比值,但是上面的表結(jié)構(gòu)中計(jì)劃與實(shí)出都在type一個(gè)字段下,我又該如何將where條件設(shè)置為type等于“計(jì)劃”求出計(jì)劃數(shù),同時(shí)又將where條件設(shè)置為type等于“實(shí)出”求出實(shí)際完成的數(shù)量呢?
2.1表結(jié)構(gòu)
plan(表名)
2.2需求
求出2022年8月9號(hào)一天的計(jì)劃完成率
2.3sql語句
SELECT planNums, finishNums, IFNULL( ROUND( finishNums / planNums * 100, 2 ), 0 ) finishRate FROM ( SELECT SUM( num ) planNums FROM plan WHERE type = '計(jì)劃' AND date = '2022-08-09') a, ( SELECT SUM( num ) finishNums FROM plan WHERE type = '實(shí)出' AND date = '2022-08-09') b
2.4sql語句解析
針對(duì)上述的問題,我們使用臨時(shí)表就可以完美的解決,根據(jù)條件的不同我們建立兩個(gè)臨時(shí)表,分別記錄當(dāng)天的計(jì)劃總數(shù)和當(dāng)天的實(shí)際完成的數(shù)量,實(shí)現(xiàn)分層處理,最后我們?cè)賹⑴R時(shí)表中的數(shù)據(jù)進(jìn)行運(yùn)算就可以得到當(dāng)天的計(jì)劃完成率。
SELECT SUM( num ) planNums FROM plan WHERE type = '計(jì)劃' AND date = '2022-08-09'
此句求出2022年8月9號(hào)的計(jì)劃總數(shù)臨時(shí)表
SELECT SUM( num ) finishNums FROM plan WHERE type = '實(shí)出' AND date = '2022-08-09'
此句求出2022年8月9號(hào)的實(shí)際完成總數(shù)臨時(shí)表
IFNULL(ROUND(finishNums/planNums*100,2),0):此函數(shù)用于排除臨時(shí)表中計(jì)劃總數(shù)為null的情況,若ROUND(finishNums/planNums*100,2)為空,則返回值為0,否則返回值就是ROUND(finishNums/planNums*100,2)
ROUND(finishNums/planNums*100,2):此函數(shù)為四舍五入函數(shù),將finishNums/planNums*100計(jì)算的結(jié)果保留兩位小數(shù)
注意:臨時(shí)表一定需要起別名,否則就會(huì)報(bào)錯(cuò)
到此這篇關(guān)于sql語句中臨時(shí)表使用方法的文章就介紹到這了,更多相關(guān)sql臨時(shí)表使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#連接Excel2003和Excel2007以上版本做數(shù)據(jù)庫的連接字符串
C#連接Excel2003和Excel2007以上版本做數(shù)據(jù)庫的連接字符串具體如下,需要的朋友可以參考下2013-11-11SQL SERVER 數(shù)據(jù)庫備份的三種策略及語句
這篇文章主要介紹了SQL SERVER 數(shù)據(jù)庫備份的三種策略及語句,需要的朋友可以參考下2017-02-02請(qǐng)問在mssql“SQL事件探查器”里表格的標(biāo)題,如CPU,Read,Write,Duration,SPID......
請(qǐng)問在mssql“SQL事件探查器”里表格的標(biāo)題,如CPU,Read,Write,Duration,SPID.........的解釋...2007-07-07使用BULK INSERT大批量導(dǎo)入數(shù)據(jù) SQLSERVER
使用BULK INSERT大批量導(dǎo)入數(shù)據(jù) SQLSERVER,需要的朋友可以參考下。2011-12-12