前言
目前生產(chǎn)環(huán)境中MySQL一直使用的是5.7版本,不敢貿(mào)然升級版本,涉及數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)備份等內(nèi)容。但看到各大平臺分享的Mysql8的新版本特性,按捺不住強烈的好奇心,于是在本地搭建了Mysql服務,實際驗證了一部分新功能,確實帶給我新的認知。接下來就分享給大家使用心得。
概述
- Mysql是小編從事開發(fā)行業(yè)三年多來,接觸的最多的數(shù)據(jù)存儲介質(zhì),它屬于關系型數(shù)據(jù)庫,以開源免費、體積小、速度快、使用成本低等優(yōu)點,深得大部分用戶喜愛,同時也受很多公司青睞。
- 自從8.0.11正式版本發(fā)布以來,不知不覺已經(jīng)有四年多的時間,官方號稱比5.7版本快兩倍(讀寫負載、IO密集型任務負載、高競爭負載等),同時新增了窗口函數(shù)(實現(xiàn)類似集合函數(shù)的新型查詢方式)等。下面將從窗口函數(shù)特性進行詳細介紹。
窗口函數(shù)
- 窗口函數(shù)又名OLAP函數(shù)(Online Anallytical Processing,聯(lián)機分析處理),用來實時分析處理數(shù)據(jù);
- 通用語法:select 窗口函數(shù) over (partition by 分組列名, order by 排序列名)
- 專用窗口函數(shù):
- rank函數(shù):如按班級名稱分類,按序號正序,用rank函數(shù)實現(xiàn),相同序號會出現(xiàn)并列ranking值
SELECT *, RANK() over (partition by `NAME` ORDER BY NUM) as ranking FROM f0627
結(jié)果
name num ranking
A 1 1
A 2 2
A 3 3
A 4 4
A 6 5
B 2 1
B 2 1
B 8 3
sql說明:rank為排序函數(shù),通過partition by按照班級名稱分組(此處不會類似group by將數(shù)據(jù)去重),然后按照序號正序,最后得到的rangking字段就是分類后的排序結(jié)果。
- row_number函數(shù):同樣如按班級名稱分類,按序號正序,會忽略相同序號,順序生成ranking值
SELECT *, ROW_NUMBER() over (partition by `NAME` ORDER BY NUM) as ranking FROM f0627
結(jié)果
name num ranking
A 1 1
A 2 2
A 3 3
A 4 4
A 6 5
B 2 1
B 2 2
B 8 3
sql說明:rank為排序函數(shù),通過partition by按照班級名稱分組(此處不會類似group by將數(shù)據(jù)去重),然后按照序號正序,最后得到的rangking字段就是分類后的排序結(jié)果,觀察ranking結(jié)果忽略了并列情況。
- 聚合窗口函數(shù):
- sum()函數(shù):如按班級名稱分類,按序號正序,累加序號,將分類后第一行至當前行的累加結(jié)果匯總至‘求和’字段
SELECT *, SUM(NUM) over (partition by `NAME` ORDER BY NUM) as '求和' FROM f0627
結(jié)果
name num 求和
A 1 1
A 2 3
A 3 6
A 4 10
A 6 16
B 2 2
B 2 4
B 8 12
sql說明:sum()為求和函數(shù),通過partition by按照班級名稱分組(此處不會類似group by將數(shù)據(jù)去重),然后按照序號正序,將每種分類第一行至當前行的序號累加結(jié)果匯總至‘求和’字
- avg()函數(shù):在上面sum函數(shù)基礎上,增加avg函數(shù)計算平均值
SELECT *, SUM(NUM) over (partition by `NAME` ORDER BY NUM) as '求和', AVG(NUM) over (partition by `NAME` ORDER BY NUM) as '平均' FROM f0627
結(jié)果
name num 求和 平均
A 1 1 1.0000
A 2 3 1.5000
A 3 6 2.0000
A 4 10 2.5000
A 6 16 3.2000
B 2 2 2.0000
B 2 4 2.0000
B 8 12 4.0000
sql說明:avg()為平均值函數(shù),通過partition by按照班級名稱分組(此處不會類似group by將數(shù)據(jù)去重),然后按照序號正序,將每種分類第一行至當前行的序號累加結(jié)果求平均值至‘平均’字段
- CTE表達式(Common Table Expressions,通用表表達式):結(jié)合窗口函數(shù)使得復雜的嵌入查詢更加清晰,提高了可讀性
- 求平均值案例
WITH cte as (SELECT *, SUM(NUM) over (partition by `NAME` ORDER BY NUM) as suming, AVG(NUM) over (partition by `NAME` ORDER BY NUM) as avging FROM f0627)
SELECT * FROM cte where avging > 2
結(jié)果
name num suming avging
A 4 10 2.5000
A 6 16 3.2000
B 8 12 4.0000
sql說明:with cte as (sql) 將sql結(jié)果可以定義為cte的派生表,可以直接查詢派生表過濾平均值大于2的結(jié)果。
總結(jié)
- Mysql 8.0新增的窗口函數(shù)極大簡化了sql實現(xiàn)語句,實現(xiàn)了更加復雜的數(shù)據(jù)邏輯,可以滿足更多的開發(fā)場景,從而相應減少了代碼開發(fā)成本。
- 當窗口函數(shù)結(jié)合cte使用時,可以將嵌套查詢分層,使得語句可讀性更高,當然性能也是有保證的。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
存儲
+關注
關注
13文章
4535瀏覽量
87500 -
函數(shù)
+關注
關注
3文章
4381瀏覽量
64948 -
數(shù)據(jù)結(jié)構(gòu)
關注
3文章
573瀏覽量
40761 -
MySQL
+關注
關注
1文章
861瀏覽量
27968
發(fā)布評論請先 登錄
相關推薦
熱點推薦
TFT LCD使用心得
TFT LCD使用心得體會的原因是,最近一段時間工作上一直在使用TFT LCD,主要是3.5寸LCD,以SAMSUNG的LTV350QV及其一些臺灣的兼容產(chǎn)品為主。工作的內(nèi)容就是把這些屏在我們的產(chǎn)品上應用起
發(fā)表于 10-16 13:04
?45次下載
詳細談談TFT LCD 的使用心得
深入談談TFT LCD 的使用心得最近一段時間工作上一直在使用TFT LCD,主要是3、5 寸LCD,以SAMSUNG 的LTV350QV 及其一些臺灣的兼容產(chǎn)品為主。工作的內(nèi)容就是把這些屏在我們的產(chǎn)品上
發(fā)表于 03-18 17:49
?3次下載
CAD使用心得之五:圖層控制、視圖調(diào)整、圖形選擇
CAD使用心得之五 圖層控制命令、視圖命令、圖元選擇方式 圖層控制命令和視圖命令都是輔助繪圖的命令,但是運用這些命令的關鍵,在于是否熟練,這將會極大的影響繪圖的效率。 先
發(fā)表于 10-19 17:08
?2078次閱讀
無線藍牙模塊CC2540使用心得
CC2540作為一個超低消耗功率的真正系統(tǒng)單晶片已經(jīng)得到普遍運用。本文開始介紹了CC2540的定義與CC2540應用市場,其次闡述了CC2540主要功能,最后詳細闡述了無線藍牙模塊CC2540的使用心得。
發(fā)表于 03-09 15:05
?1.9w次閱讀
Django教程之Django的使用心得詳細資料免費下載
本文檔的主要內(nèi)容詳細介紹的是Django教程之Django的使用心得詳細資料免費下載。
發(fā)表于 10-17 18:03
?11次下載

MySQL流程函數(shù)的操作方法
流程函數(shù)是一類很常用的函數(shù),我們可以通過流程函數(shù)在SQL語句中實現(xiàn)條件選擇,能實現(xiàn)我們想要的條件判斷。下表列出了MySQL中的流程函數(shù)。

內(nèi)核調(diào)試利器printk的使用心得
? ? [導讀] 剛剛開始做Linux相關開發(fā)工作時,深感Linux內(nèi)核代碼龐大,要加些自己的驅(qū)動進內(nèi)核代碼樹,常常深陷bug的泥沼難以自拔,今天來分享一下內(nèi)核調(diào)試利器printk的使用心得。 前面

智慧服裝工廠電子看板試用心得
智慧服裝工廠電子看板試用心得實現(xiàn)了企業(yè)生產(chǎn)的進度實時監(jiān)控、現(xiàn)場拉式生產(chǎn)、生產(chǎn)節(jié)拍平衡和異常情況的反饋功能。而接下來我們主要討論的是智慧服裝工廠電子看板試用心得在生產(chǎn)線與倉庫之間的物料配送體系,要談到這個物料配送問題,則要首先考慮到物料的申請、準備、運輸追蹤和物料接收的流程

MySQL去重3種方法分享
在 MySQL 中通常是使用 distinct 或 group by子句,但在支持窗口函數(shù)的 sql(如Hive SQL、Oracle等等) 中還可以使用 row_number 窗口
發(fā)表于 06-26 11:05
?1309次閱讀

HT for Web (Hightopo) 使用心得(5)- 動畫的實現(xiàn)
其實,在 HT for Web 中,有多種手段可以用來實現(xiàn)動畫。我們這里仍然用直升機為例,只是更換了場景。增加了巡游過程。 使用 HT 開發(fā)的一個簡單網(wǎng)頁直升機巡邏動畫(Hightopo 使用心得

評論