一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL窗口函數(shù)使用心得

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-07 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

目前生產(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)知。接下來就分享給大家使用心得。

概述

  • Mysql是小編從事開發(fā)行業(yè)三年多來,接觸的最多的數(shù)據(jù)存儲(chǔ)介質(zhì),它屬于關(guān)系型數(shù)據(jù)庫(kù),以開源免費(fèi)、體積小、速度快、使用成本低等優(yōu)點(diǎn),深得大部分用戶喜愛,同時(shí)也受很多公司青睞。
  • 自從8.0.11正式版本發(fā)布以來,不知不覺已經(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ī)分析處理),用來實(shí)時(shí)分析處理數(shù)據(jù);
  • 通用語法: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說明:rank為排序函數(shù),通過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說明:rank為排序函數(shù),通過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   2
   B   2   4
   B   8   12

  sql說明:sum()為求和函數(shù),通過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   2    2.0000
   B   2   4    2.0000
   B   8   12    4.0000

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

總結(jié)

  • Mysql 8.0新增的窗口函數(shù)極大簡(jiǎn)化了sql實(shí)現(xiàn)語句,實(shí)現(xiàn)了更加復(fù)雜的數(shù)據(jù)邏輯,可以滿足更多的開發(fā)場(chǎng)景,從而相應(yīng)減少了代碼開發(fā)成本。
  • 當(dāng)窗口函數(shù)結(jié)合cte使用時(shí),可以將嵌套查詢分層,使得語句可讀性更高,當(dāng)然性能也是有保證的。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4532

    瀏覽量

    87449
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64860
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40748
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    860

    瀏覽量

    27929
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    濾波電容的使用心得

    圖說濾波電容的使用心得,非常詳細(xì),不信你還不懂~
    發(fā)表于 07-18 15:23

    關(guān)于spartan6套件試用心得,不看肯定后悔

    求大神分享一些關(guān)于spartan6套件試用心得
    發(fā)表于 04-15 06:42

    關(guān)于Spartan6板子的使用心得

    給大家分享一下關(guān)于Spartan6板子的使用心得。
    發(fā)表于 04-30 07:03

    TFT LCD使用心得

    TFT LCD使用心得體會(huì)的原因是,最近一段時(shí)間工作上一直在使用TFT LCD,主要是3.5寸LCD,以SAMSUNG的LTV350QV及其一些臺(tái)灣的兼容產(chǎn)品為主。工作的內(nèi)容就是把這些屏在我們的產(chǎn)品上應(yīng)用起
    發(fā)表于 10-16 13:04 ?45次下載

    詳細(xì)談?wù)凾FT LCD 的使用心得

    深入談?wù)凾FT LCD 的使用心得最近一段時(shí)間工作上一直在使用TFT LCD,主要是3、5 寸LCD,以SAMSUNG 的LTV350QV 及其一些臺(tái)灣的兼容產(chǎn)品為主。工作的內(nèi)容就是把這些屏在我們的產(chǎn)品上
    發(fā)表于 03-18 17:49 ?3次下載

    CAD使用心得之五:圖層控制、視圖調(diào)整、圖形選擇

    CAD使用心得之五 圖層控制命令、視圖命令、圖元選擇方式 圖層控制命令和視圖命令都是輔助繪圖的命令,但是運(yùn)用這些命令的關(guān)鍵,在于是否熟練,這將會(huì)極大的影響繪圖的效率。 先
    發(fā)表于 10-19 17:08 ?2076次閱讀

    ADXL345芯片使用心得

    ADXL345芯片使用心得,介紹使用傳感器過程的使用體會(huì)
    發(fā)表于 05-11 11:08 ?23次下載

    數(shù)字溫濕度傳感器DHT11使用心得

    一點(diǎn)溫濕度傳感器DHT11使用心得
    發(fā)表于 04-14 15:35 ?7次下載

    無線藍(lán)牙模塊CC2540使用心得

    CC2540作為一個(gè)超低消耗功率的真正系統(tǒng)單晶片已經(jīng)得到普遍運(yùn)用。本文開始介紹了CC2540的定義與CC2540應(yīng)用市場(chǎng),其次闡述了CC2540主要功能,最后詳細(xì)闡述了無線藍(lán)牙模塊CC2540的使用心得。
    發(fā)表于 03-09 15:05 ?1.9w次閱讀

    Django教程之Django的使用心得詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Django教程之Django的使用心得詳細(xì)資料免費(fèi)下載。
    發(fā)表于 10-17 18:03 ?11次下載
    Django教程之Django的使<b class='flag-5'>用心得</b>詳細(xì)資料免費(fèi)下載

    MySQL流程函數(shù)的操作方法

    流程函數(shù)是一類很常用的函數(shù),我們可以通過流程函數(shù)在SQL語句中實(shí)現(xiàn)條件選擇,能實(shí)現(xiàn)我們想要的條件判斷。下表列出了MySQL中的流程函數(shù)。
    的頭像 發(fā)表于 04-16 17:17 ?3185次閱讀
    <b class='flag-5'>MySQL</b>流程<b class='flag-5'>函數(shù)</b>的操作方法

    內(nèi)核調(diào)試?yán)鱬rintk的使用心得

    ? ? [導(dǎo)讀] 剛剛開始做Linux相關(guān)開發(fā)工作時(shí),深感Linux內(nèi)核代碼龐大,要加些自己的驅(qū)動(dòng)進(jìn)內(nèi)核代碼樹,常常深陷bug的泥沼難以自拔,今天來分享一下內(nèi)核調(diào)試?yán)鱬rintk的使用心得。 前面
    的頭像 發(fā)表于 11-08 17:31 ?3107次閱讀
    內(nèi)核調(diào)試?yán)鱬rintk的使<b class='flag-5'>用心得</b>

    智慧服裝工廠電子看板試用心得

    智慧服裝工廠電子看板試用心得實(shí)現(xiàn)了企業(yè)生產(chǎn)的進(jìn)度實(shí)時(shí)監(jiān)控、現(xiàn)場(chǎng)拉式生產(chǎn)、生產(chǎn)節(jié)拍平衡和異常情況的反饋功能。而接下來我們主要討論的是智慧服裝工廠電子看板試用心得在生產(chǎn)線與倉(cāng)庫(kù)之間的物料配送體系,要談到這個(gè)物料配送問題,則要首先考慮到物料的申請(qǐng)、準(zhǔn)備、運(yùn)輸追蹤和物料接收的流程
    的頭像 發(fā)表于 02-17 18:02 ?1380次閱讀
    智慧服裝工廠電子看板試<b class='flag-5'>用心得</b>

    MySQL去重3種方法分享

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

    HT for Web (Hightopo) 使用心得(5)- 動(dòng)畫的實(shí)現(xiàn)

    其實(shí),在 HT for Web 中,有多種手段可以用來實(shí)現(xiàn)動(dòng)畫。我們這里仍然用直升機(jī)為例,只是更換了場(chǎng)景。增加了巡游過程。 使用 HT 開發(fā)的一個(gè)簡(jiǎn)單網(wǎng)頁直升機(jī)巡邏動(dòng)畫(Hightopo 使用心得
    的頭像 發(fā)表于 11-29 11:04 ?1127次閱讀
    HT for Web (Hightopo) 使<b class='flag-5'>用心得</b>(5)- 動(dòng)畫的實(shí)現(xiàn)