網(wǎng)站首頁 編程語言 正文
一、臨時表實現(xiàn)分步處理
1.概述
當需要的結果需要經(jīng)過多次處理后才能最終得到我們需要的結果時,就可以使用臨時表,這里臨時表就起到了一個中間處理的作用,實現(xiàn)了分步處理,簡化了問題。
2.實例
2.1表格結構
pln_order_pool_detail(表名)
2.2需求
需要得到訂單平均交付周期、最大交付周期、最小交付周期,為了實現(xiàn)這一需求,首先我們要求出每個訂單的交付周期,其次我們需要將這些訂單的交付周期求其平均值。
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' 是求出每個訂單的交付周期作為臨時表,每個訂單的交付周期即狀態(tài)(order_state)為'finish'的訂單的實際交付時間(reality_deliver_time)減去該訂單的創(chuàng)建時間(create_time)
DATEDIFF(reality_deliver_time,create_time):該函數(shù)表示實際交付日期(reality_deliver_time)與創(chuàng)建日期(create_time)的間隔,且結果是以天數(shù)進行返回
?AVG( leadTime ):將臨時表中的交付周期通過AVG函數(shù)求出平均交付周期
MAX( leadTime):將臨時表中的交付周期通過MAX函數(shù)求出最大交付周期
MIN( leadTime):將臨時表中的交付周期通過MIN函數(shù)求出最小交付周期
二、臨時表實現(xiàn)分層處理
1、概述
在實際開發(fā)中經(jīng)常會碰到一個字段下存儲的結果不同,而我又需要對這兩個結果進行處理得到最終的結果,此時如果沒有臨時表我們就可能需要寫兩個sql語句分別得到結果,然后在后端進行運算得到最終需要的結果。
2、實例
也許上面的概述表述并不清楚,現(xiàn)在用一個實例來說明。
像這樣的一個表結構,我想要計算2022年8月9號這一天的計劃完成率,那就需要計算該日期的計劃數(shù)和計劃完成數(shù)的比值,也就是計算該日期的實出對應的數(shù)量與該日期的計劃對應的數(shù)量的比值,但是上面的表結構中計劃與實出都在type一個字段下,我又該如何將where條件設置為type等于“計劃”求出計劃數(shù),同時又將where條件設置為type等于“實出”求出實際完成的數(shù)量呢?
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語句解析
針對上述的問題,我們使用臨時表就可以完美的解決,根據(jù)條件的不同我們建立兩個臨時表,分別記錄當天的計劃總數(shù)和當天的實際完成的數(shù)量,實現(xiàn)分層處理,最后我們再將臨時表中的數(shù)據(jù)進行運算就可以得到當天的計劃完成率。
SELECT SUM( num ) planNums FROM plan WHERE type = '計劃' AND date = '2022-08-09'
?此句求出2022年8月9號的計劃總數(shù)臨時表
SELECT SUM( num ) finishNums FROM plan WHERE type = '實出' AND date = '2022-08-09'
此句求出2022年8月9號的實際完成總數(shù)臨時表
IFNULL(ROUND(finishNums/planNums*100,2),0):此函數(shù)用于排除臨時表中計劃總數(shù)為null的情況,若ROUND(finishNums/planNums*100,2)為空,則返回值為0,否則返回值就是ROUND(finishNums/planNums*100,2)
ROUND(finishNums/planNums*100,2):此函數(shù)為四舍五入函數(shù),將finishNums/planNums*100計算的結果保留兩位小數(shù)
注意:臨時表一定需要起別名,否則就會報錯
原文鏈接:https://blog.csdn.net/m0_60845963/article/details/126246590
相關推薦
- 2022-12-26 C#操作xml文件之Linq?To?Xml詳解_C#教程
- 2022-12-29 React引入css的三種方式小結_React
- 2022-06-19 C++深入探索類真正的形態(tài)之struct與class_C 語言
- 2022-07-21 基于Spring Boot項目構建流水線
- 2022-06-17 C語言詳細講解多維數(shù)組與多維指針_C 語言
- 2022-04-05 python中時間轉換錯誤:時間戳轉換|帶有時區(qū)的轉換 如何解析ISO 8601格式的日期?
- 2023-01-07 Python個人博客程序開發(fā)實例后臺編寫_python
- 2023-04-08 react中實現(xiàn)拖拽排序react-dnd功能_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支