成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL窗口函數優秀實踐,你學會了嗎?

數據庫 MySQL
Mysql 8.0新增的窗口函數極大簡化了sql實現語句,實現了更加復雜的數據邏輯,可以滿足更多的開發場景,從而相應減少了代碼開發成本。

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

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

今天的內容主要以實踐為主,有興趣的小伙伴可以一同操作~

?前言

目前生產環境中MySQL一直使用的是5.7版本,不敢貿然升級版本,涉及數據結構、數據備份等內容。但看到各大平臺分享的Mysql8的新版本特性,按捺不住強烈的好奇心,于是在本地搭建了Mysql服務,實際驗證了一部分新功能,確實帶給我新的認知。接下來就分享給大家使用心得。

?概述

  • Mysql是小編從事開發行業三年多來,接觸的最多的數據存儲介質,它屬于關系型數據庫,以開源免費、體積小、速度快、使用成本低等優點,深得大部分用戶喜愛,同時也受很多公司青睞。
  • 自從8.0.11正式版本發布以來,不知不覺已經有四年多的時間,官方號稱比5.7版本快兩倍(讀寫負載、IO密集型任務負載、高競爭負載等),同時新增了窗口函數(實現類似集合函數的新型查詢方式)等。下面將從窗口函數特性進行詳細介紹。

?窗口函數

  • 窗口函數又名OLAP函數(Online Anallytical Processing,聯機分析處理),用來實時分析處理數據;
  • 通用語法:select 窗口函數 over (partition by 分組列名, order by 排序列名)
  • 專用窗口函數:

rank函數:如按班級名稱分類,按序號正序,用rank函數實現,相同序號會出現并列ranking值

SELECT *, RANK() over (partition by `NAME` ORDER BY NUM) as ranking FROM f0627

結果
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為排序函數,通過partition by按照班級名稱分組(此處不會類似group by將數據去重),然后按照序號正序,最后得到的rangking字段就是分類后的排序結果。

row_number函數:同樣如按班級名稱分類,按序號正序,會忽略相同序號,順序生成ranking值

SELECT *, ROW_NUMBER() over (partition by `NAME` ORDER BY NUM) as ranking FROM f0627

結果
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為排序函數,通過partition by按照班級名稱分組(此處不會類似group by將數據去重),然后按照序號正序,最后得到的rangking字段就是分類后的排序結果,觀察ranking結果忽略了并列情況。
  • 聚合窗口函數:

sum()函數:如按班級名稱分類,按序號正序,累加序號,將分類后第一行至當前行的累加結果匯總至‘求和’字段


SELECT *, SUM(NUM) over (partition by `NAME` ORDER BY NUM) as '求和' FROM f0627

結果
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說明:sum()為求和函數,通過partition by按照班級名稱分組(此處不會類似group by將數據去重),然后按照序號正序,將每種分類第一行至當前行的序號累加結果匯總至‘求和’字

avg()函數:在上面sum函數基礎上,增加avg函數計算平均值

SELECT *, SUM(NUM) over (partition by `NAME` ORDER BY NUM) as '求和', AVG(NUM) over (partition by `NAME` ORDER BY NUM) as '平均' FROM f0627

結果
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說明:avg()為平均值函數,通過partition by按照班級名稱分組(此處不會類似group by將數據去重),然后按照序號正序,將每種分類第一行至當前行的序號累加結果求平均值至‘平均’字段

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

求平均值案例

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

結果
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結果可以定義為cte的派生表,可以直接查詢派生表過濾平均值大于2的結果。

?總結

Mysql 8.0新增的窗口函數極大簡化了sql實現語句,實現了更加復雜的數據邏輯,可以滿足更多的開發場景,從而相應減少了代碼開發成本。

當窗口函數結合cte使用時,可以將嵌套查詢分層,使得語句可讀性更高,當然性能也是有保證的。

以上就是分享的全部內容,僅是mysql8新特性一小部分,其它特性還在探索中,如果有疑問和想法可以私信小編,大家一起學習討論。?

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2022-04-22 08:10:45

云上數據安全

2022-05-13 08:17:05

HTTPRESTful架構

2022-12-06 07:53:33

MySQL索引B+樹

2023-05-05 06:54:07

MySQL數據查詢

2023-03-26 22:31:29

2022-12-28 09:02:50

WebStorm主題字段

2024-01-08 07:29:57

多集群模型Istio網絡拓撲

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2023-11-01 07:28:31

MySQL日志維護

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2023-04-10 09:31:00

路由技術廠商

2023-11-08 10:12:40

架構函數元素

2024-04-09 13:16:21

Rust命名規范

2023-05-30 14:16:00

開源項目Python

2023-10-10 11:04:11

Rust難點內存

2024-05-06 00:00:00

InnoDBView隔離
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日一区二区 | 国产婷婷精品av在线 | 最新高清无码专区 | 九九久久久 | 久久综合伊人一区二区三 | 黄色网址在线免费观看 | 亚洲性综合网 | 欧美亚洲一区二区三区 | 国产欧美精品一区二区色综合 | 亚洲一区二区电影网 | 一区二区三区视频在线 | 亚洲国产看片 | 日韩免费1区二区电影 | 久久婷婷国产香蕉 | 日韩精品视频在线播放 | 日日天天| 亚洲精品久久久久中文字幕欢迎你 | 久久久久国产一级毛片 | 日韩欧美在线观看 | 久久精品国产一区二区电影 | 黄色一级毛片免费看 | gav成人免费播放视频 | 久久激情网 | 国产毛片久久久久久久久春天 | 国产欧美日韩综合精品一区二区 | 国产传媒毛片精品视频第一次 | 中文字幕第十页 | 成人污污视频 | 国产成人福利在线观看 | 国产午夜精品久久久久 | 一区二区三区精品在线视频 | 日韩高清黄色 | 亚洲欧美中文日韩在线v日本 | 亚洲一区日韩 | 精品一区二区久久久久久久网精 | 综合成人在线 | 激情视频中文字幕 | 成人免费视频网站 | 欧美三区视频 | a成人| www.日本在线观看 |