MySQL8.0其他新特性

MySQL8.0其他新特性

MySQL8.0新特性概述

MySQL8.0新增特性

MySQL8.0其他新特性

MySQL8.0其他新特性

MySQL8.0其他新特性

MySQL8.0其他新特性

MySQL8.0其他新特性

MySQL8.0移除的旧特性

MySQL8.0其他新特性

MySQL8.0其他新特性

新特性1:窗口函数

窗口函数的分类

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

窗口函数分为静态和动态

  • 静态窗口功能:窗口大小是固定的,不会因记录而改变
    [En]

    static window function: the window size is fixed and will not vary from record to record*

  • 动态窗口功能:窗口大小因记录而异
    [En]

    dynamic window function: window size varies from record to record*

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()函数

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

[En]

Mainly query the value that is less than or equal to a certain number

#查询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组

小结

窗口函数可以在不减少表中行数的情况下对数据进行分组和排序,这对于统计和排序非常有用。

[En]

Window functions can group and sort data without reducing the number of rows in the table, which is very useful for statistics and sorting.

公用表表达式

MySQL8.0其他新特性

普通公用表表达式

  • 语法结果
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;

Original: https://www.cnblogs.com/wht-de-bk/p/16041362.html
Author: T,a,o
Title: MySQL8.0其他新特性

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505532/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 测试计划

    ​ 1.测试计划的定义:描述需要完成的所有工作,包括被测项目的目的、背景、范围、资源、进度、环境、任务、策略,以及相应的风险和措施。 ​ 2.测试计划的作用: 对后面的测试过程起到…

    数据库 2023年6月16日
    069
  • 09 子查询

    数据库关联子查询和非关联子查询 非关联子查询:数据库嵌套查询中内层查询是完全独立于外层查询的。 执行顺序: 先执行内层查询 得到内层查询的结果后带入外层,再执行外层查询 selec…

    数据库 2023年6月16日
    095
  • ReentrantLock 公平锁源码 第0篇

    ReentrantLock 0 关于ReentrantLock的文章其实写过的,但当时写的感觉不是太好,就给删了,那为啥又要再写一遍呢 最近闲着没事想自己写个锁,然后整了几天出来后…

    数据库 2023年6月16日
    075
  • Lambda表达式

    1.常见单方法接口 Comparator Runnable Callable @FunctionalInterface 只定义了单方法的接口称之为 FunctionalInterf…

    数据库 2023年6月16日
    082
  • SpringBoot自定义环境变量——EnvironmentPostProcessor

    现有需求是将数据库配置文件中账号密码相关信息分离且加密,用到了SpringBoot中 EnvironmentPostProcessor接口。可以将外部配置文件读取注入系统中。 实现…

    数据库 2023年6月16日
    087
  • 分析了2020年3万多条的微博热搜,我看到了什么

    前言 2020年是艰难的一年,但即使再难,也都过去了。 分析一下2020年的新闻热搜,可以大致了解网民都在关注什么。 微博热搜以娱乐为主,头条的热搜更偏向民生与时事。今天,我们先分…

    数据库 2023年6月16日
    091
  • 数据库_多表查询_内连接&外连接

    首先明确一下定义: 内连接:在多表查询的时候,只检索出表之间相互匹配的行(满足匹配条件的行),结果中不包括两个表之间不匹配的行。 一个不太准确但易懂的例子:比如有两个表,表1存储了…

    数据库 2023年5月24日
    0112
  • HTML详解

    一、初识HTML 初始基本标签代码解释 点击查看代码 <!–DOCTYPE:告诉浏览器我们要使用什么规范–> <!DOCTYPE html> <h…

    数据库 2023年6月16日
    083
  • Js前端-路由管理器函数

    buildUrl:function( path ,params ){ let url = "" + path; let _paramUrl = "&q…

    数据库 2023年6月9日
    071
  • 两表关联更新、删除-七星海棠

    两表关联更新 通用方法 update test1 set name=(select name from test2 where test2.id=test1.id), age=(s…

    数据库 2023年6月11日
    077
  • MySql 删除数据表

    定义: 删除数据表就是删除数据库中已经存在的表。请注意,当表被删除时,表的定义和表中的所有数据都将被删除。因此,在执行删除操作之前,最好对表中的数据进行备份,以避免无法挽回的后果。…

    数据库 2023年5月24日
    077
  • ArrayList扩容机制

    1.构造函数 有三种 说第一种无参构造,默认初始容量为10 2.add函数 /** * 将指定的元素追加到此列表的末尾。 */ public boolean add(E e) { …

    数据库 2023年6月16日
    077
  • Mysql数据库存取原理及性能优化

    一、Mysql的系统架构图 二、Mysql存储引擎 Mysql中的数据是通过一定的方式存储在文件或者内存中的,任何方式都有不同的存储、查找和更新机制,这意味着选择不同的方式对于数据…

    数据库 2023年5月24日
    051
  • HMX-Server-分步式服务器框架(开源+源码)

    (原文地址:http://www.cnblogs.com/hellohuang/p/5492302.html ) 这是一个简单实现有分步式框架,由5个服务进程组成一个服务器,它们分…

    数据库 2023年6月14日
    0106
  • 程序员“迷惑代码”大赏

    谈到程序员,对于外行人来说一贯的印象就是格子衫大裤衩外加人字拖,蓬头(秃头)垢面黑眼圈,还有就是”人傻钱多死得快”🤣,这是外界对程序员固有的思想,但是作为新…

    数据库 2023年6月11日
    079
  • Yapi安装配置(CentOs)

    环境要求 nodejs(7.6+)mongodb(2.6+)git 准备工作 清除yum命令缓存 sudo yum clean all 卸载低版本nodejs yum remove…

    数据库 2023年6月11日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球