开窗函数!

开窗函数(Window Function)是SQL中的一种高级功能,允许你在一组相关行(一个“窗口”)上执行聚合操作,而不像传统聚合函数(如SUM(), AVG(), COUNT())那样将所有匹配行合并成单个汇总行。开窗函数在处理复杂的数据分析和报告任务时特别有用,因为它能保持原始数据行的同时进行复杂的计算。以下是开窗函数的关键特性:


基本概念: 开窗函数在查询结果集上定义一个“窗口”或“视图”,这个窗口可以包含当前行、前面的行、后面的行,甚至整个结果集的一部分。函数计算时会考虑这个窗口内的数据,但结果仍然按行返回。


主要类别:
聚合函数:如SUM(), AVG(), COUNT(), MIN(), MAX(),但它们在每个窗口内计算,而不是整个结果集。
排位函数:包括RANK(), DENSE_RANK(), ROW_NUMBER(),用于确定行在窗口中的位置。
分析函数:如LEAD(), LAG(), FIRST_VALUE(), LAST_VALUE(),用于访问同一窗口内的其他行数据。


语法结构:

function_name() OVER (
       [PARTITION BY column1, column2, ...]
       [ORDER BY column3, column4, ... [ASC|DESC]]
       [ROWS BETWEEN start AND end]
   )


PARTITION BY:将结果集分割成多个分区,每个分区单独处理。
ORDER BY:在每个分区或整个窗口内定义行的顺序。
ROWS BETWEEN:进一步定义窗口的范围,比如前几行、后几行或特定范围内的行。

mysql 如果你用的版本不支持开窗函数,可以自己实现

实例:

CREATE TABLE `ranktest` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `type2` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

SELECT
	( @i := CASE WHEN @type2 = type2 THEN @i + 1 ELSE 1 END ) AS rownum,
	p.*,(
		@type2 := type2 
	) 
FROM
	ranktest p,(
	SELECT
		@i := 0 
	) AS a 
ORDER BY
	type2,
	id DESC

 

完成了 type2 相同的作为一个 窗口进行 独立排序 。

sql 解释:
(select @i := 0 ) as a初始化变量@i为0
@type2 := type2 将当前行的 type2 字段 赋值给 @type2变量
( @i := CASE WHEN @type2 = type2 THEN @i + 1 ELSE 1 END ) AS rownum 来判断当前行的type2值是否与前一行的type2相同,从而决定@i的值是递增还是重置为1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

这就是英伟达 CEO 黄仁勋所说的人工智能“下一波浪潮”|TodayAI

在台湾一年一度的科技展 COMPUTEX 开幕前的周日,英伟达(Nvidia)首席执行官黄仁勋(Jensen Huang)表示,机器人和“理解物理定律的 AI”将成为下一波技术浪潮。他指出,英伟达目前正在推动生成式人工…

[Redis]Zset类型

Zset有序集合相对于字符串、列表、哈希、集合来说会有一些陌生。 它保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有一个唯一的浮点类型的分数(score)与之关联,着使得有序集合中的元素是可…

c语言:自定义类型(枚举、联合体)

前言: c语言中中自定义类型不仅有结构体,还有枚举、联合体等类型,上一期我们详细讲解了结构体的初始化,使用,传参和内存对齐等知识,这一期我们来介绍c语言中的其他自定义类型枚举和联合体的知识。 1.位段 …

jupyter notebook anaconda环境下查看|加载|更换内核

文章目录 1 问题复现2 查看内核位置3 调整python解释器位置 1 问题复现 在conda虚拟环境中使用pip安装相应package, 但是在jupyter notebook中加载该package时报错 [ERROR]ModuleNotFoundError: No module named shap 此时,除去包安装出现问题以外&am…

ARM学习(28)NXP 双coreMCU IMX1160学习

笔者最近接触到一块IMXRT1160的双core板子,特依次来记录学习一下 1、IMXRT1160 板子介绍 介绍一下NXP的Demo板子,是一个双core的板子,Cortex-M7和Cortex-M4,总计1MB的RAM空间,256KB的ROM空间,提供了丰富的…

哥斯拉、冰蝎、中国蚁剑在护网中流量特征分析,收藏起来当资料吧,24年护网用得上

护网哥斯拉、冰蝎、中国蚁剑流量分析 【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》🔗包含了应急响应工具、入侵排查、日志分析、权限维持、Windows应急实战、Linux应急实战、Web应急实战。 护网中最担心的是木马已经到了服…

CV每日论文--2024.6.4

1、Mixed Diffusion for 3D Indoor Scene Synthesis 中文 标题:用于 3D 室内场景合成的混合扩散 简介:这篇论文提出了一种名为MiDiffusion的混合离散-连续扩散模型,用于从给定的房间类型、平面图和可能存在的物体中合成逼真的3D室内场景。 作者指出,该…

芯片验证分享5 —— 激励开发3

大家好,我是谷公子,上节课跟大家分享了黑盒技术中的等价类分析和边界值分析方法。我们这次来分享下黑盒设计中的其它技术。 边界值分析和等价类划分的一个弱点是没有对输入条件的组合进行分析。对输入组合进行验证并不是简单的事情,因为即使…

Linux 36.3 + JetPack v6.0@jetson-inference之语义分割

Linux 36.3 JetPack v6.0jetson-inference之语义分割 1. 源由2. segNet2.1 命令选项2.2 下载模型2.2.1 Cityscapes2.2.2 DeepScene2.2.3 MHP2.2.4 VOC2.2.5 SUN 2.3 操作示例2.3.1 单张照片2.3.2 多张照片2.3.3 视频 3. 代码3.1 Python3.2 C 4. 参考资料 1. 源由 分类和目标识…

指针的认识(野指针、规避野指针、assert宏断言)

目录 a.野指针成因 1.指针未初始化 2.指针越界访问 3.指针指向的空间释放 b.规避野指针 1.指针初始化 2.小心指针越界 3.指针变量不再使用时,及时置NULL,指针使用之前检查有效性 4.避免返回局部变量的地址 c.assert宏断言的使用 概念&#xff1…

【Kubernetes】k8s的调度约束(亲和与反亲和)

一、调度约束 list-watch 组件 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和…

Qt/C++音视频开发76-获取本地有哪些摄像头名称/ffmpeg内置函数方式

一、前言 上一篇文章是写的用Qt的内置函数方式获取本地摄像头名称集合,但是有几个缺点,比如要求Qt5,或者至少要求安装了多媒体组件multimedia,如果没有安装呢,或者安装的是个空的呢,比如很多嵌入式板子&am…

js

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>Document</title></head><body><input type"button" values"点击" onclick"alert(hahaha)"><script>alert(&…

【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库

1.简介 Fuse.js是一款功能强大且轻量级的JavaScript模糊搜索库&#xff0c;支持OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;操作系统&#xff0c;它具备模糊搜索和排序等功能。该库高性能、易于使用、高度可配置&#xff0c;支持多种数据类型和多语…

界面控件DevExpress WinForms的流程图组件 - 可完美复制Visio功能(二)

DevExpress WinForms的Diagram&#xff08;流程图&#xff09;组件允许您复制Microsoft Visio中的许多功能&#xff0c;并能在下一个Windows Forms项目中引入信息丰富的图表、流程图和组织图。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows F…

Solidworks 提取模型中的零件,并组合成一个新的零件,放入特征库

对方发来一个STP文件&#xff0c;其中有模型的部分零件想为我所用。 Shift键鼠标左键 选取需要的零件 在选好零件上右键&#xff0c;选择“孤立” 左边找到部件&#xff0c;ctrl左键选中&#xff0c;选择“插入到新零件” 点 绿色 勾 就选择保存类型&#xff0c;完成 。 打开这…

【技术】工业机器人机械臂安装高速电主轴打磨去毛刺

随着现代工业的发展&#xff0c;机械加工在制造业中扮演着至关重要的角色。然而&#xff0c;机械加工后的零件普遍存在着毛刺问题。这些毛刺不仅影响了零件的外观&#xff0c;更对工序的定位、产品的装配以及性能产生了不良影响&#xff0c;甚至可能导致机械设备损坏等严重事故…

计算机专业本科就业还是考研?考研有哪些热门方向?

考研并不是一个逃避就业的避难所&#xff0c;也不是一个简单的提升待遇的手段。考研是提升自我的途径&#xff0c;特别是对于那些对特定技术领域有浓厚兴趣并愿意深入研究的人来说 一个本科生能够认真学三年&#xff0c;那么他们所掌握的技能和知识不应该逊色于那些通过短期培…

作为表达式调用时,无法解析类修饰器的签名。vue3+ts+vite,使用装饰器时报错

作为表达式调用时&#xff0c;无法解析类修饰器的签名。 The runtime will invoke the decorator with 2 arguments, but the decorator expects 1.ts(1238) 页面也无法打开 解决方案&#xff1a; {"extends": "vue/tsconfig/tsconfig.dom.json","in…

利用Qss切分图片、使用图标

之前一直没有弄明白&#xff0c;现在明白了&#xff0c;记录一下&#xff01; 一般形式如下&#xff1a; border-image: url(:/icon_btn_menu_40x36.png) 0 80 0 0; 在原始图片上、上右下左、各切一刀、形成的图片区域、即为所取图标。 切的位置分别是距离最上、最右、最下…