自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL窗口函數(shù)優(yōu)秀實(shí)踐,你學(xué)會(huì)了嗎?

數(shù)據(jù)庫(kù) MySQL
Mysql 8.0新增的窗口函數(shù)極大簡(jiǎn)化了sql實(shí)現(xiàn)語(yǔ)句,實(shí)現(xiàn)了更加復(fù)雜的數(shù)據(jù)邏輯,可以滿足更多的開(kāi)發(fā)場(chǎng)景,從而相應(yīng)減少了代碼開(kāi)發(fā)成本。

?大家好,我是指北君。共勉名言:

有知識(shí)的人不實(shí)踐,等于一只蜜蜂不釀蜜。——薩迪

今天的內(nèi)容主要以實(shí)踐為主,有興趣的小伙伴可以一同操作~

?前言

目前生產(chǎn)環(huán)境中MySQL一直使用的是5.7版本,不敢貿(mào)然升級(jí)版本,涉及數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)備份等內(nèi)容。但看到各大平臺(tái)分享的Mysql8的新版本特性,按捺不住強(qiáng)烈的好奇心,于是在本地搭建了Mysql服務(wù),實(shí)際驗(yàn)證了一部分新功能,確實(shí)帶給我新的認(rèn)知。接下來(lái)就分享給大家使用心得。

?概述

  • Mysql是小編從事開(kāi)發(fā)行業(yè)三年多來(lái),接觸的最多的數(shù)據(jù)存儲(chǔ)介質(zhì),它屬于關(guān)系型數(shù)據(jù)庫(kù),以開(kāi)源免費(fèi)、體積小、速度快、使用成本低等優(yōu)點(diǎn),深得大部分用戶喜愛(ài),同時(shí)也受很多公司青睞。
  • 自從8.0.11正式版本發(fā)布以來(lái),不知不覺(jué)已經(jīng)有四年多的時(shí)間,官方號(hào)稱比5.7版本快兩倍(讀寫負(fù)載、IO密集型任務(wù)負(fù)載、高競(jìng)爭(zhēng)負(fù)載等),同時(shí)新增了窗口函數(shù)(實(shí)現(xiàn)類似集合函數(shù)的新型查詢方式)等。下面將從窗口函數(shù)特性進(jìn)行詳細(xì)介紹。

?窗口函數(shù)

  • 窗口函數(shù)又名OLAP函數(shù)(Online Anallytical Processing,聯(lián)機(jī)分析處理),用來(lái)實(shí)時(shí)分析處理數(shù)據(jù);
  • 通用語(yǔ)法:select 窗口函數(shù) over (partition by 分組列名, order by 排序列名)
  • 專用窗口函數(shù):

rank函數(shù):如按班級(jí)名稱分類,按序號(hào)正序,用rank函數(shù)實(shí)現(xiàn),相同序號(hào)會(huì)出現(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說(shuō)明:rank為排序函數(shù),通過(guò)partition by按照班級(jí)名稱分組(此處不會(huì)類似group by將數(shù)據(jù)去重),然后按照序號(hào)正序,最后得到的rangking字段就是分類后的排序結(jié)果。

row_number函數(shù):同樣如按班級(jí)名稱分類,按序號(hào)正序,會(huì)忽略相同序號(hào),順序生成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說(shuō)明:rank為排序函數(shù),通過(guò)partition by按照班級(jí)名稱分組(此處不會(huì)類似group by將數(shù)據(jù)去重),然后按照序號(hào)正序,最后得到的rangking字段就是分類后的排序結(jié)果,觀察ranking結(jié)果忽略了并列情況。
  • 聚合窗口函數(shù):

sum()函數(shù):如按班級(jí)名稱分類,按序號(hào)正序,累加序號(hào),將分類后第一行至當(dāng)前行的累加結(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 4
B 2 4
B 8 12

sql說(shuō)明:sum()為求和函數(shù),通過(guò)partition by按照班級(jí)名稱分組(此處不會(huì)類似group by將數(shù)據(jù)去重),然后按照序號(hào)正序,將每種分類第一行至當(dāng)前行的序號(hào)累加結(jié)果匯總至‘求和’字

avg()函數(shù):在上面sum函數(shù)基礎(chǔ)上,增加avg函數(shù)計(jì)算平均值

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 4 2.0000
B 2 4 2.0000
B 8 12 4.0000

sql說(shuō)明:avg()為平均值函數(shù),通過(guò)partition by按照班級(jí)名稱分組(此處不會(huì)類似group by將數(shù)據(jù)去重),然后按照序號(hào)正序,將每種分類第一行至當(dāng)前行的序號(hào)累加結(jié)果求平均值至‘平均’字段

  • CTE表達(dá)式(Common Table Expressions,通用表表達(dá)式):結(jié)合窗口函數(shù)使得復(fù)雜的嵌入查詢更加清晰,提高了可讀性

求平均值案例

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說(shuō)明:with cte as (sql) 將sql結(jié)果可以定義為cte的派生表,可以直接查詢派生表過(guò)濾平均值大于2的結(jié)果。

?總結(jié)

Mysql 8.0新增的窗口函數(shù)極大簡(jiǎn)化了sql實(shí)現(xiàn)語(yǔ)句,實(shí)現(xiàn)了更加復(fù)雜的數(shù)據(jù)邏輯,可以滿足更多的開(kāi)發(fā)場(chǎng)景,從而相應(yīng)減少了代碼開(kāi)發(fā)成本。

當(dāng)窗口函數(shù)結(jié)合cte使用時(shí),可以將嵌套查詢分層,使得語(yǔ)句可讀性更高,當(dāng)然性能也是有保證的。

以上就是分享的全部?jī)?nèi)容,僅是mysql8新特性一小部分,其它特性還在探索中,如果有疑問(wèn)和想法可以私信小編,大家一起學(xué)習(xí)討論。?

責(zé)任編輯:武曉燕 來(lái)源: Java技術(shù)指北
相關(guān)推薦

2022-04-22 08:10:45

云上數(shù)據(jù)安全

2022-05-13 08:17:05

HTTPRESTful架構(gòu)

2022-12-06 07:53:33

MySQL索引B+樹(shù)

2023-05-05 06:54:07

MySQL數(shù)據(jù)查詢

2023-03-26 22:31:29

2024-01-08 07:29:57

多集群模型Istio網(wǎng)絡(luò)拓?fù)?/a>

2022-12-28 09:02:50

WebStorm主題字段

2023-11-01 07:28:31

MySQL日志維護(hù)

2023-11-08 10:12:40

架構(gòu)函數(shù)元素

2024-04-09 13:16:21

Rust命名規(guī)范

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2024-01-19 08:25:38

死鎖Java通信

2023-04-10 09:31:00

路由技術(shù)廠商

2023-09-12 07:26:46

2023-05-24 08:14:55

2024-10-24 23:49:42

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)