【Mysql系列】Mysql之窗口函数

news2024/11/13 8:01:36

适用场景

窗口函数适用场景: 对分组统计结果中的每一条记录进行计算的场景下, 使用窗口函数更好, 注意, 是每一条;因为MySQL的普通聚合函数的结果(如 group by)是每一组只有一条记录。

准备数据

创建表

create table app_product
(
    id            bigint auto_increment comment '主键'
        primary key,
    product_name     varchar(100)  null comment '产品名称',
    product_type    varchar(100)  null comment '产品类型',
    price          int  null comment '价格'
)
    comment '产品表';

准备数据:

INSERT INTO app_product (id, product_name, product_type, price) VALUES (1, 'A1', 'A', 20);
INSERT INTO app_product (id, product_name, product_type, price) VALUES (2, 'A2', 'A', 40);
INSERT INTO app_product (id, product_name, product_type, price) VALUES (3, 'A3', 'A', 60);
INSERT INTO app_product (id, product_name, product_type, price) VALUES (4, 'B1', 'B', 10);
INSERT INTO app_product (id, product_name, product_type, price) VALUES (5, 'B2', 'B', 30);
INSERT INTO app_product (id, product_name, product_type, price) VALUES (6, 'B3', 'B', 50);
INSERT INTO app_product (id, product_name, product_type, price) VALUES (7, 'C1', 'C', 23);
INSERT INTO app_product (id, product_name, product_type, price) VALUES (8, 'C4', 'C', 57);

在这里插入图片描述

使用示例

使用别名

SELECT *,row_number() OVER w AS priceRank
FROM app_product
 WINDOW w AS (PARTITION BY product_type ORDER BY price DESC);

序号函数

按照产品分类,按照价格排序。

row_number()顺序展示编号

SELECT
	*,
	row_number() OVER (PARTITION BY product_type ORDER BY price DESC) AS priceRank
FROM
	app_product;

获取每个分类的前3个价格高的产品

select * from (SELECT
	*,
	row_number() OVER (PARTITION BY product_type ORDER BY price DESC) AS priceRank
FROM
	app_product) t where priceRank <=3;

rank(),同等级同序号,序号不连续。

SELECT
	*,
	RANK() OVER (PARTITION BY product_type ORDER BY price DESC) AS priceRank
FROM
	app_product;

dense_rank(),同等级同序号,序号连续。

SELECT
	*,
	dense_rank() OVER (PARTITION BY product_type ORDER BY price DESC) AS priceRank
FROM
	app_product;

分布函数

percent_rank(),等级值百分比。(rank-1)/(rows-1)

SELECT *,
       percent_rank() OVER (PARTITION BY product_type ORDER BY price DESC) AS priceRank
FROM app_product;

cume_dist(),累积分布值。小于等于rank值的行数/总行数

SELECT *,
       cume_dist() OVER (PARTITION BY product_type ORDER BY price DESC) AS priceRank
FROM app_product;

前后函数

LAG(expr, n) - 返回当前行的前n行(本组内)的expr值

SELECT *,
       lag(price,1) OVER (PARTITION BY product_type ORDER BY price DESC) AS pre_price
FROM app_product;

LEAD(expr, n)返回当前行的后n行(本组)的expr值

SELECT *,
       lead(price,1) OVER (PARTITION BY product_type ORDER BY price DESC) AS post_price
FROM app_product;

首位行数

first_value(expr)获取分组内第一行数据 , last_value(expr)获取分组内最后一行数据,nth_value(price,2)获取分组内第n行的数据。

SELECT *,
       first_value(price) OVER w first_price,last_value(price) OVER w last_price,nth_value(price,2) over w nTh_price
FROM app_product WINDOW w AS (PARTITION BY product_type ORDER BY price DESC);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4次迭代,让我的 Client 优化 100倍!泄漏一个 人人可用的极品方案!

4次迭代&#xff0c;让我的HttpClient提速100倍 在大家的生产项目中&#xff0c;经常需要通过Client组件&#xff08;HttpClient/OkHttp/JDK Connection)调用第三方接口。 尼恩的一个生产项目也不例外。 在一个高并发的中台生产项目中。有一个比较特殊的请求&#xff0c;一次…

「文档数据库之争」MongoDB和CouchDB的比较

MongoDB和CouchDB都是基于文档的NoSQL数据库类型。文档数据库又称mdocument store&#xff0c;通常用于存储半结构化数据的文档格式及其详细描述。它允许创建和更新程序&#xff0c;而不需要引用主模式。移动应用程序中的内容管理和数据处理是可以应用文档存储的两个字段。Mong…

积分球原理及积分球类型介绍

标题积分球标准型积分球LED积分球均匀光源便携式高亮度积分球均匀光源微光积分球均匀光源积分球均匀光源iSphere高光谱响应光学积分球其他分类积分球 积分球原理:由于球体内整涂有白色漫反射材料的空腔球体&#xff0c;球壁上开有采样口&#xff0c;当待测样品光源进入积分球的…

Java之关于String字符串笔试面试重点

目录 一.关于字符串的常量池 1.关于字符串产生的三种方式 2.关于字符串的常量池 3.直接赋值法和new的方式产生对象的区别 二.关于intern方法 1.情况一(已经包含) 2.情况二(已经包含) 3.情况三(未包含) 4.情况四 三.关于字符串的不可变性 1.了解字符串的不可变性 2.Str…

python+selenium使用webdriver启动chrome出现闪退现象解决

这两天发现之前开发的爬虫程序出问题了&#xff1a;谷歌浏览器出现打开立即闪退的现象&#xff0c;代码未修改过&#xff0c;检查也没有任何问题&#xff01; 查看chrome浏览器发现版本更新了 ↑&#xff08;点击chrome浏览器右上角三个点&#xff0c;最下面帮助→Google Chr…

[软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)

文章目录1. 什么是面向对象方法学&#xff1f;它有哪些优点&#xff1f;2. 什么是“对象”&#xff1f;它与传统的数据有何异同&#xff1f;3. 什么是“类”&#xff1f;4. 什么是“继承”&#xff1f;5. 什么是模型&#xff1f;开发软件为何要建模&#xff1f;6. 什么是对象模…

[软件工程导论(第六版)]第8章 维护(复习笔记)

文章目录8.1 软件维护的定义8.2 软件维护的特点8.3 软件维护过程8.4 软件的可维护性8.5 预防性维护8.6 软件再工程过程维护的基本任务&#xff1a;保证软件在一个相当长的时期能够正常运行软件工程的主要目的就是要提高软件的可维护性&#xff0c;减少软件维护所需要的工作量&a…

C语言编程规范 第一部分

、代码总体原则 1、清晰第一 清晰性是易于维护、易于重构的程序必需具备的特征。代码首先是给人读的&#xff0c;好的代码应当可以像文章一样发声朗诵出来。目前软件维护期成本占整个生命周期成本的40%~90%。根据业界经验&#xff0c;维护期变更代码的成本&#xff0c;小型系统…

Spring Batch ItemProcessor组件-默认处理器

目录 引言 概念 默认ItemProcessor ValidatingItemProcessor&#xff1a;校验处理器 ItemProcessorAdapter&#xff1a;适配器处理器 ScriptItemProcessor&#xff1a;脚本处理器 CompositeItemProcessor&#xff1a;组合处理器 自定义ItemProcessor处理器 转视频版 引…

图数据库中的 OLTP 与 OLAP 融合实践

在一些图计算的场景下&#xff0c;我们会遇到同时需要处理 OLTP 和 OLAP 的问题。而本文就给了一个 OLTP 与 OLAP 融合实践的指导思路&#xff0c;希望给你带来一点启发。 Dag Controller 介绍 Dag Controller 是 NebulaGraph 企业版的图系统&#xff0c;经过反复测试无误后已…

rabbitMq安装(小短文)--未完成

rabbitMq是在activeMq的基础上创造的&#xff0c;有前者的功能&#xff0c;比前者强&#xff0c;属于后来居上。系统环境:windows10首先下载相关软件Erlang&#xff0c;因为他是这个语言写的。https://www.erlang.org/downloads然后安装&#xff0c;并且弄到环境变量里验证是否…

Robot Framework自动化测试---元素定位

不要误认为Robot framework 只是个web UI测试工具&#xff0c;更正确的理解Robot framework是个测试框架&#xff0c;之所以可以拿来做web UI层的自动化是国为我们加入了selenium2的API。比如笔者所处工作中&#xff0c;更多的是拿Robot framework来做数据库的接口测试&#xf…

Leetcode.2257 统计网格图中没有被保卫的格子数

题目链接 Leetcode.2257 统计网格图中没有被保卫的格子数 Rating &#xff1a; 1709 题目描述 给你两个整数 m和 n表示一个下标从 0开始的 m x n网格图。同时给你两个二维整数数组 guards和 walls&#xff0c;其中 guards[i] [rowi, coli]且 walls[j] [rowj, colj]&#xff…

适合初学者的超详细实用调试技巧(下)

我们日常写代码的时候&#xff0c;常常会遇到bug的情况&#xff0c;这个时候像我这样的初学者就会像无头苍蝇一样这里改改那里删删&#xff0c;调试的重要性也就显现出来&#xff0c;这篇文章接着上文来讲解。 上文地址&#xff1a;(8条消息) 适合初学者的超详细实用调试技巧&…

Tomcat目录介绍,结构目录有哪些?哪些常用?

bin 启动&#xff0c;关闭和其他脚本。这些 .sh文件&#xff08;对于Unix系统&#xff09;是这些.bat文件的功能副本&#xff08;对于Windows系统&#xff09;。由于Win32命令行缺少某些功能&#xff0c;因此此处包含一些其他文件。 比如说&#xff1a;windows下启动tomcat用的…

3款强大到离谱的电脑软件,个个提效神器,从此远离加班

推荐3款让你偷懒&#xff0c;让你上头的提效电脑软件&#xff0c;个个功能强大&#xff0c;让你远离加班&#xff01; 很多几个小时才能做好的事情&#xff0c;用上它们&#xff0c;只需要5分钟就行&#xff01;&#xff01; 1、JNPF —— 个人最喜欢的低代码软件 它为开发者…

利用OpenCV的函数equalizeHist()对图像作直方图均衡化处理

如果一幅图像的灰度值集中在某个比较窄的区域&#xff0c;则图像的对比度会显得比较小&#xff0c;不便于对图像的分析和处理。 图像的直方图均衡化可以实现将原图像的灰度值范围扩大&#xff0c;这样图像的对比度就得到了提高&#xff0c;从而方便对图像进行后续的分析和处理…

从Docker挂载逃逸原理复现分析到BlueMoon实战

Docker逃逸 什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互…

Elasticsearch:在满意度调查中实现并使用情绪分析器

如果你通过博客或新闻关注 Elastic&#xff0c;你已经知道在最新版本的 Elasticsearch 中已经提供了用于自然语言处理 (NLP) 的资源。事实上&#xff0c;在我之前的博客文章中&#xff0c;我已经推出了很多关于 NLP 的博文。请详细阅读 “Elastic&#xff1a;开发者上手指南” …

【Linux 多线程同步】使用同步和互斥实现生产消费模型

目录 1.同步的接口 2.多线程但是按顺序来执行 3.生产消费模型 4.使用互斥加同步实现生产消费模型 &#xff08;采用环形队列&#xff09; 同步&#xff1a;在保证数据安全的前提下&#xff0c;让线程能够按照某种特定的顺序访问临界资源&#xff0c;从而有效避免饥饿问题 …