MySQL8.0其他新特性

来源:https://www.cnblogs.com/wht-de-bk/archive/2022/03/22/16041362.html
-Advertisement-
Play Games

MySQL8.0其他新特性 MySQL8.0新特性概述 MySQL8.0新增特性 MySQL8.0移除的舊特性 新特性1:視窗函數 視窗函數的分類 MySQL8.0版本開始支持視窗函數,視窗函數的作用類似於在查詢過程中對數據進行分組,不同的是,分組操作會把分組的結果聚合成一條記錄,而視窗函數是將結果 ...


MySQL8.0其他新特性

MySQL8.0新特性概述

MySQL8.0新增特性

MySQL8.0移除的旧特性

新特性1:窗口函数

窗口函数的分类

MySQL8.0版本开始支持窗口函数,窗口函数的作用类似于在查询过程中对数据进行分组,不同的是,分组操作会把分组的结果聚合成一条记录,而窗口函数是将结果置于每一条记录中

窗口函数分为静态和动态

  • 静态窗口函数:窗口大小是固定的,不会因记录的不同而不同
  • 动态窗口函数:窗口大小会随着记录的不同而变化

语法格式

函数 OVER (| PARTITION BY 字段名 ORDER BY 字段名 ASC | DESC);

或是

函数 OVER 窗口名 _WINDOW 窗口名 AS (| PARTITION BY 字段名 ORDER BY 字段名 ASC | DESC);

举例说明

序号函数

  1. ROW_NUMBER()函数

能够对数据的序号进行顺序排序,在表中第一行添加一列字段(从1—n)

#查询每个商品分类下价格从高到低的商品信息
SELECT ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY price DESC) AS ROW_NUM,
       #  序号函数           分类                     排序                 添加字段的别名
要查询的字段
from goods;#要查询的表

#结果:将category_id相同的放在一起,并编号到1—n(每一类重新排序)
  1. RANK()函数
#查询每个商品分类下价格从高到低的商品信息
SELECT RANK() OVER(PARTITION BY category_id ORDER BY price DESC) AS ROW_NUM,
要查询的字段
from goods;

#结果:将category_id相同的放在一起,并编号到1—n(每一类重新排序)
#但是当价格一样时,序号会是一样的,eg:1、2、2、4
  1. DENSE_RANK()函数
#查询每个商品分类下价格从高到低的商品信息
SELECT DENSE_RANK() OVER(PARTITION BY category_id ORDER BY price DESC) AS ROW_NUM,
要查询的字段
from goods;

#结果:将category_id相同的放在一起,并编号到1—n(每一类重新排序)
#但是当价格一样时,序号会是一样的,eg:1、2、2、3

分布函数

  1. PERCENT_RANK()函数

计算方式:(rank-1) / (rows-1)

#查询表中category_id = 1的商品类别下的PERCENT_RANK的值
SELECT RANK() OVER w AS r,
PERCENT_RANK() OVER w AS pr,
要查询的字段
WHERE category_id = 1 WINDOW w AS (PARTITION BY category_id ORDER BY price DESC) AS pr;

#此题的比率是序号-1 / 总数-1;
  1. CUME_DIST()函数

主要是查询小于或是等于某个数的值

#查询goods数据表下小于或是等于当前价格的比例
SELECT CUME_DIST() OVER (PARTITION BY category_id ORDER BY price ASC) AS cd,
要查询的字段
FROM goods;

#当前数据小于、等于全部数据的的概率

前后函数

  1. LAG(expr,n)函数(前)
#查询前一个商品的价格于当前价格的查值

SELECT 基本信息,price - pre_price AS diff_price
FROM (SELECT 基本信息,LAG(expr,1) OVER w AS pre_price#子查询:多出一列是上一行的价格
      FROM goods
      WINDOW w AS (PARTITION BY category_id ORDER BY price ASC))t;    
  1. LEAD(expr,n)函数(后)

和前面的几乎一样

首位函数

  1. FIRST_VALUE(expr)函数

FIRST_VALUE(expr)函数返回第一个expr的值

#按照价格排序,查询第一个商品的价格信息
SELECT 基本信息,FIRST_VALUE(price) OVER w AS first_price
FROM goods WINDOW w AS (ARTITION BY category_id ORDER BY price ASC)

#新增加的列是数据是该分类下的第一行价格数据
  1. LAST_VALUE(expr)函数

LAST_VALUE(expr)函数返回最后一个expr的值

其他函数

  1. WTH_VALUE(expr,n)函数

WTH_VALUE(expr,n)返回函数第n个expr的值

  1. NTILE(n)函数

NTILE(n)将每一类平均进行n组

小结

窗口函数可以对数据进行分组、排序,并且不会减少由表中的行数,对统计和排序非常有用

公用表表达式

普通公用表表达式

  • 语法结果
WITH CTE名称
AS(子查询)
SELECT | DELETE | UPDATE 语句;
  • 举个例子
#查询员工所在部门的详细信息
方式一:子查询实现
SELECT *
FROM departments
WHERE department_id IN (SELECT DISTINCT department_id
                        FROM departments
                       );
方式二:CTE实现
WITH CIE_emp t2
AS (SELECT DISTINCT department_id FROM departments)#我感觉是创建了一个临时的新表

SELECT *
FROM departments t1 JOIN CIE_emp t2#多表连接了
WHERE t1.department_id = t2.department_id;

递归公用表表达式

递归;自己调用自己

  • 语法格式:
WITH RECURSIVE
CTE名称 AS(子查询)
SELECT | DELETE | UPDATE 语句;
  • 举个例子
#查询所有的下下属
WITH PECURSIVE cte 
AS
(
 SELECT 基本信息,1 AS n FROM employees WHERE id = 100 #初始值
 UNION ALL
 SELECT 基本信息,n+1 FROM employees AS a JOIN cte 
 ON a.id = cte.id#递归调用
)
SELECT 基本信息 
FROM cte 
WHERE n > 3;

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 來源:blog.csdn.net/cold___play/article/details/108032204 Nacos架構 Provider APP:服務提供者 Consumer APP:服務消費者 Name Server:通過VIP(Virtual IP)或DNS的方式實現Nacos高可用集群的 ...
  • List集合的特有功能: * A:添加功能 * void add(int index,Object element):在指定位置添加元素 * B:獲取功能 * Object get(int index):獲取指定位置的元素 * C:列表迭代器 * ListIterator listIterator( ...
  • 快速列表簡介 在Redis3 .2版本之前,存儲列表(list)數據結構使用的是壓縮列表(ziplist)和鏈表(linkedlist),當列表元素個數比較少並且每個元素占用空間比較小的時候,使用壓縮列表。當列表元素個數比較多或者某個元素占用空間比較大的時候,使用鏈表。 考慮到鏈表的附加空間相對太高 ...
  • 本文以Java代碼為例介紹如何實現將彩色PDF文件轉為灰度(黑白)的PDF文件,即:將PDF文檔裡面的彩色圖片或者文字等通過調用PdfGrayConverter.toGrayPdf()方法轉為文檔頁面為灰色調、無彩色效果的文檔,可實現縮小文檔大小的目的。下麵是程式運行環境及代碼示例。 配置程式環境 ...
  • AnotherRedisDesktopManager = Another + RedisDesktopManager,是 Redis 客戶端 RedisDesktopManager 的替代品,已經被收錄在了 Redis 官方客戶端頁了: https://redis.io/clients Anothe ...
  • 明天Java 18將正式發佈, 雖然它不是長期支持 (LTS) 版本,但它卻實現了九個 JEP(在Java 18列出)。有哪些特性值得關註呢?今天胖哥為你提前解讀。再看、點贊、轉發、關註來一波吧。 JEP 400 將 UTF-8 指定為標準 Java API 的預設字元集。通過此更改,依賴於預設字元 ...
  • 學習視頻地址:https://www.bilibili.com/video/BV1jJ411S7xr?share_source=copy_webSpring官網:https://spring.io/SpringCloud中文網:https://www.springcloud.cc/SpringClo ...
  • 雲平臺:騰訊雲 系統:ubuntu 20.04 ###第一部分:緣由 1、我的一臺雲伺服器上掛載了兩塊硬碟。一塊 50G 系統盤、一塊 400G 數據盤。 然後我查詢目前在 Linux 系統上的文件系統磁碟使用情況統計,只看到了 /dev/vda2 一塊50G的磁碟信息,未看到 400G的磁碟。 # ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...