MySQL中的窗口函数
深入理解窗口函数(Window Functions)
窗口函数确实经常用于分组后为行分配序号(如1,2,3…),但它的功能远不止于此。窗口函数是SQL中极其强大的分析工具,可以让你在不减少行数的情况下进行复杂计算。
窗口函数本质
窗口函数的核心特点是:
- 不折叠行:与GROUP BY不同,窗口函数会保留所有原始行
- 定义窗口:通过OVER()子句指定计算的数据范围(“窗口”)
- 逐行计算:为每一行返回一个基于其所在窗口的计算结果
窗口函数家族
1. 排名类函数
ROW_NUMBER()
:连续唯一序号(1,2,3,4…)RANK()
:相同值同排名,后续跳过(1,2,2,4…)DENSE_RANK()
:相同值同排名,后续不跳过(1,2,2,3…)
2. 分析类函数
LEAD(列名, n)
:获取当前行后第n行的值LAG(列名, n)
:获取当前行前第n行的值FIRST_VALUE(列名)
:窗口第一个值LAST_VALUE(列名)
:窗口最后一个值NTH_VALUE(列名, n)
:窗口第n个值
3. 聚合函数作为窗口函数
SUM() OVER()
AVG() OVER()
COUNT() OVER()
MAX() OVER()
MIN() OVER()
窗口定义的三要素
窗口函数的强大之处在于可以精确控制"窗口"范围:
函数() OVER([PARTITION BY 分组列][ORDER BY 排序列][ROWS/RANGE 框架]
)
1. PARTITION BY
将数据分成多个组,函数在每个组内独立计算(类似GROUP BY但不合并行)
2. ORDER BY
定义分区内的排序方式,影响序号分配和滑动窗口计算
3. 窗口框架
窗口框架(Window Frame) 是 SQL 窗口函数中一个 高级但极其有用 的功能,它允许你 更精细地控制计算范围,而不仅仅是按 PARTITION BY 分组或按 ORDER BY 排序。
窗口框架的作用
在 OVER() 子句中,除了 PARTITION BY 和 ORDER BY,你还可以用 ROWS 或 RANGE 来定义:
- 计算时包含哪些行(例如:当前行 + 前3行)
- 是否包含当前行
- 是否包含未来的行(FOLLOWING)
典型应用场景
✅ 移动平均(Moving Average)
✅ 累计计算(Running Total)
✅ 前后行对比(Lag/Lead 分析)
✅ 滑动窗口统计(如最近5天的总和)
基本语法
SUM(column) OVER([PARTITION BY ...][ORDER BY ...]ROWS|RANGE BETWEEN <start> AND <end>
)
- ROWS → 按 物理行 计算(固定行数)
- RANGE → 按 逻辑范围 计算(如相同值的行视为同一组)
窗口框架的边界选项
选项 | 含义 |
---|---|
UNBOUNDED PRECEDING | 从分区的第一行开始 |
n PRECEDING | 当前行之前的 n 行 |
CURRENT ROW | 当前行 |
n FOLLOWING | 当前行之后的 n 行 |
UNBOUNDED FOLLOWING | 直到分区的最后一行 |
3. 实际案例
案例1:计算3天移动平均(ROWS)
SELECT date, -- 日期列revenue, -- 当天的收入AVG(revenue) OVER( -- 计算收入的移动平均值ORDER BY date -- 按日期排序ROWS BETWEEN 2 PRECEDING AND CURRENT ROW -- 包含当前行 + 前2行) AS moving_avg_3day -- 结果列名
FROM sales;
关键点:
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
•2 PRECEDING
= 当前行的前2行
•CURRENT ROW
= 当前行
→ 合起来就是 当前行 + 前2行,共3行数据
假设数据是这样的:
date | revenue |
---|---|
2023-01-01 | 100 |
2023-01-02 | 150 |
2023-01-03 | 200 |
2023-01-04 | 250 |
查询结果会是:
date | revenue | moving_avg_3day | 计算方式 |
---|---|---|---|
2023-01-01 | 100 | 100.0 | (100) / 1(只有1天数据) |
2023-01-02 | 150 | 125.0 | (100 + 150) / 2 |
2023-01-03 | 200 | 150.0 | (100 + 150 + 200) / 3 |
2023-01-04 | 250 | 200.0 | (150 + 200 + 250) / 3 |
前几行不够怎么办?
• 比如第1天(2023-01-01),前面没有数据,就只算它自己。
• 第2天(2023-01-02),只有前1天的数据,就只算2天的平均。
案例2:计算累计到当前行的总和(RANGE)
# 计算销售数据的累计收入(running total),也就是从最早日期到当前日期的收入总和
SELECT date,revenue,SUM(revenue) OVER( #对 revenue 列求和ORDER BY date #按日期排序RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW# 计算范围是从最早日期(UNBOUNDED PRECEDING)到当前行(CURRENT ROW)) AS running_total
FROM sales;
关键点解析
RANGE
vsROWS
:
•RANGE
:按逻辑范围计算(相同日期的行会被合并统计)。
•ROWS
:按物理行计算(严格按行数计算,即使日期相同也会分开统计)。UNBOUNDED PRECEDING
:
• 表示从分区的第一行开始计算(这里是按日期排序后的最早日期)。CURRENT ROW
:
• 计算到当前行为止。
假设原始数据:
date | revenue |
---|---|
2023-01-01 | 100 |
2023-01-02 | 150 |
2023-01-03 | 200 |
查询结果:
date | revenue | running_total | 计算逻辑 |
---|---|---|---|
2023-01-01 | 100 | 100 | 100 |
2023-01-02 | 150 | 250 | 100 (前一天) + 150 |
2023-01-03 | 200 | 450 | 250 (前累计) + 200 |
案例3:计算当前行 + 前后各1行的总和(滑动窗口)
SELECT date,revenue,SUM(revenue) OVER(ORDER BY dateROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS sliding_sum
FROM sales;
结果示例:
date | revenue | sliding_sum |
---|---|---|
2023-01-01 | 100 | 250 |
2023-01-02 | 150 | 450 |
2023-01-03 | 200 | 600 |
2023-01-04 | 250 | 450 |
4. ROWS
vs RANGE
的区别
类型 | 行为 | 适用场景 |
---|---|---|
ROWS | 按 物理行 计算(固定行数) | 移动平均、滑动窗口 |
RANGE | 按 逻辑范围 计算(相同值的行视为同一组) | 处理重复值(如相同日期的数据) |
示例(RANGE
处理相同日期的数据):
SELECT date,revenue,SUM(revenue) OVER(ORDER BY dateRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_total
FROM sales;
如果 2023-01-01
有2行数据(100 和 150),RANGE
会 同时计算这两行,而 ROWS
会逐行计算。
5. 总结
• 窗口框架(Window Frame) 让你可以 更灵活地定义计算范围,而不仅仅是按分区或排序计算。
• ROWS
→ 适用于 固定行数 的计算(如移动平均)。
• RANGE
→ 适用于 逻辑范围 的计算(如相同日期的数据)。
• 常见用途:移动平均、累计计算、滑动窗口统计。
实际应用示例
示例1:计算累计和
# 计算销售数据的每日收入以及累计收入
SELECT date,revenue,SUM(revenue) OVER(ORDER BY date) AS running_total
FROM sales;
示例2:计算同部门薪资排名
SELECT employee_name,department,salary,RANK() OVER(PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;
示例3:计算3个月移动平均
SELECT month,sales,AVG(sales) OVER(ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg
FROM monthly_sales;
与GROUP BY的关键区别
特性 | 窗口函数 | GROUP BY |
---|---|---|
行数 | 保持原行数 | 合并行 |
计算方式 | 基于窗口计算 | 基于分组计算 |
结果 | 每行都有计算结果 | 每组一行结果 |
使用场景 | 排名、累计、移动平均等分析需求 | 汇总统计、分组聚合 |
总结
窗口函数远不止是为行分配简单序号,它是:
- 一种强大的分析工具
- 可以访问与当前行相关的其他行
- 能够进行复杂计算而不减少行数
- 现代数据分析不可或缺的功能
掌握窗口函数可以让你解决许多传统SQL难以处理的分析问题,如:
- 计算同比/环比增长率
- 识别数据趋势
- 处理复杂的排名和分组分析
- 计算各种滑动窗口指标
补充
(1)RANGE 和 ROWS 在窗口函数中的区别?
核心区别
• ROWS
= 按物理行计算(数"行数")
• RANGE
= 按逻辑范围计算(看"值的大小")
具体区别
特性 | ROWS | RANGE |
---|---|---|
计算方式 | 按绝对行数 | 按排序字段的值范围 |
相同值处理 | 每行独立计算 | 相同值会被合并计算 |
性能 | 更快 | 较慢(需要额外计算) |
典型用途 | 移动平均、固定行数计算 | 处理重复值、按实际范围计算 |
实际例子说明
假设有这样的销售数据:
-- 测试数据
INSERT INTO sales VALUES('2023-01-01', 100),('2023-01-02', 150),('2023-01-02', 200), -- 注意这里有重复日期('2023-01-03', 50);
使用ROWS的查询
SELECT date,revenue,SUM(revenue) OVER(ORDER BY dateROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rows_running_total
FROM sales;
结果:
date | revenue | rows_running_total
-----------+---------+-------------------
2023-01-01 | 100 | 100 ← 第1行
2023-01-02 | 150 | 250 ← 100+150 (第1+2行)
2023-01-02 | 200 | 450 ← 250+200 (第1+2+3行)
2023-01-03 | 50 | 500 ← 450+50
使用RANGE的查询
SELECT date,revenue,SUM(revenue) OVER(ORDER BY dateRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS range_running_total
FROM sales;
结果:
date | revenue | range_running_total
-----------+---------+--------------------
2023-01-01 | 100 | 100 ← 只有这一天
2023-01-02 | 150 | 450 ← 100+150+200 (所有1月2日的数据)
2023-01-02 | 200 | 450 ← 同上(相同日期被合并计算)
2023-01-03 | 50 | 500 ← 450+50
关键区别图示
数据行: [2023-01-01/100] → [2023-01-02/150] → [2023-01-02/200] → [2023-01-03/50]ROWS计算: 行1 行1+2 行1+2+3 行1+2+3+4[100] [250] [450] [500]RANGE计算: date<=1/1 date<=1/2 date<=1/3[100] [100+150+200] [100+150+200+50][450]重复两次 [500]
什么时候用哪个?
**用 ROWS
**
• 需要计算固定行数(如"最近3行")
• 数据没有重复排序值
• 需要更高性能
用 RANGE
• 排序字段可能有重复值(如相同日期)
• 需要按实际值范围计算(如"所有小于当前值的行")
• 做时间序列分析时更准确
进阶技巧
可以组合使用:
-- 计算当前日期及前2天(按日期范围)
SUM(revenue) OVER(ORDER BY dateRANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW
)
相关文章:
MySQL中的窗口函数
深入理解窗口函数(Window Functions) 窗口函数确实经常用于分组后为行分配序号(如1,2,3…),但它的功能远不止于此。窗口函数是SQL中极其强大的分析工具,可以让你在不减少行数的情况下进行复杂计算。 窗口函…...
WITH在MYSQL中的用法
WITH 子句(也称为公共表表达式,Common Table Expression,简称 CTE)是 SQL 中一种强大的查询构建工具,它可以显著提高复杂查询的可读性和可维护性。 一、基本语法结构 WITH cte_name AS (SELECT ... -- 定义CTE的查询…...
人工智能:如何快速筛选出excel中某列存在跳号的单元格位置?
前提: 电脑上必须提前安装好了【office AI】软件工具 方法如下: 1、打开要操作的excel表格,点击上方的【officeAI】,再点击左边的【右侧面板】按钮,就会出现如下右侧的【OfficeAI助手】 2、在OfficeAI助手的聊天框…...
动态功耗与静态功耗
0 英文缩写 SOI(Silicon on Insulator)绝缘体上硅FET(Field-Effect Transistor)场效应管CMOS(Complementary Metal Oxide Semiconductor)互补金属氧化物半导体 1 功耗分类 CMOS电路功耗主要可以通过如下…...
Webug4.0靶场通关笔记10- 第14关链接注入
目录 第14关 链接注入 1.打开靶场 2.源码分析 3.渗透实战 (1)方法1:跳转外部网页 (2)方法2:获取cookie 4.漏洞防御 本文通过《webug靶场第14关 链接注入》来进行渗透实战。 第14关 链接注入 链接注…...
PyTorch_指定运算设备 (包含安装 GPU 的 PyTorch)
PyTorch默认会将张量创建在 CPU 控制的内存中,即:默认的运算设备为 CPU。我们也可以将张量创建在 GPU 上,能够利用对于矩阵计算的优势加快模型训练。 将张量移动到 GPU 上有两种方法: 使用 cuda 方法直接在 GPU 上创建张量使用 …...
Pytorch-CUDA版本环境配置
Pytorch-CUDA版本环境配置 电脑如果是Windows平台下的Nvidia GPU的用户,需配置Pytorch的CUDA版本,分为三步: 1. 安装或更新NVIDA显卡驱动 官方驱动下载地址: https://www.nvidia.cn/Download/index.aspx?langcn 2. 安装CUDA To…...
力扣:24两两交换链表的节点
目录 1.题目描述: 2.算法思路: 3.代码展示: 1.题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能…...
SETNX的存在问题和redisson进行改进的原理
首先分布式锁的原理就是当锁不存在时则创建,创建到锁的线程则执行业务。但是在这些操作中会有一些问题,下面是redis命令setNX设置锁的代码片段 if(缓存中有){返回缓存中的数据 }else{获取分布式锁if(获取锁成功){try{查询数据库}finally{释放…...
抽象工厂模式(Abstract Factory Pattern)
很好!你现在已经开始接触设计模式了,而**抽象工厂模式(Abstract Factory Pattern)是一种常用于“创建一系列相关产品”**的经典设计模式。 我会一步步帮你理解: 🧠 一句话解释 抽象工厂模式:提…...
AVIOContext 再学习
这个目前阶段用的不多,暂时不要花费太多精力。 url 的格式不同,使用的传输层协议也不同。这块看代码还没看到自己想的这样。 目前看的信息是:avformatContext 的 io_open 回调函数 在默认情况下叫 io_open_default,在解复用的 av…...
Power Query精通指南1:查询结构设计、数据类型、数据导入与迁移(平面文件、Excel、Web)
文章目录 零、Power Query简介0.1 Power Query 主要功能0.2 Power Query 的优势0.3 Power Query 组件 一、Power Query数据处理基本流程1.1 前期准备1.2 提取1.3 转换1.3.1 Power Query 编辑器界面1.3.2 默认转换1.3.3 自定义转换 1.4 加载1.4.1 自动检测数据类型1.4.2 重命名查…...
Linux 内核升级问题
一、内核升级后启动失败 原因:initramfs 镜像未正确生成或 GRUB 配置错误。 处理步骤如下: 1、进入旧内核启动系统。 2、重新生成 initramfs: sudo dracut -f --regenerate-all 3、更新 GRUB 配置: sudo grub2-mkconfig -o /boo…...
Linux 进程间通信(IPC)详解
进程间通信(IPC)深入解析 一、进程间通信概述 在操作系统里,不同进程间常常需要进行数据交换、同步协调等操作,进程间通信(Inter - Process Communication,IPC)机制应运而生。在Linux系统中&a…...
第3章 Python 3 基础语法001
文章目录 一、缩进规则1. 基本规则2. 示例3. 多级缩进4. 常见错误二、注释规则1. 单行注释2. 多行注释3. 特殊注释4. 注释规范三、代码块规则1. 控制结构2. 函数定义3. 类定义4. 上下文管理器四、总结与最佳实践五、调试技巧以下是 Python 3 基础语法规则的详细说明,涵盖 缩进…...
数据库介绍以及windows下mysql安装
文章目录 1. 前言2. MySQL概述2.1 相关概念2.2 DBMS的分类2.3 数据库交互图2.4 MySQL 介绍 3. MySQL 安装 数据库介绍以及windows下mysql安装 1. 前言 我们浏览的淘宝商品页面详情、刷视频网站的一个个视频,这些数据其实都是存储在公司的存储系统中的。想象一下&…...
list的两种设计
1. 内存布局对比 (1) MSVC 的实现 cpp class _List_node {_List_node* _Next; // 指向下一个节点_List_node* _Prev; // 指向前一个节点_Value_type _Value; // 存储的数据 }; 特点: 每个节点包含两个指针和一个数据成员。 Debug 模式:可能添加迭代…...
【C#】一个类中的接口方法使用static和不使用static的区别
在C#中,类中的接口方法是否使用 static 修饰符会带来显著的区别。这是因为接口方法的实现和调用方式与普通方法不同,而 static 关键字的使用进一步改变了这些行为。 以下是两者的区别: 1. 不使用 static 的接口方法 在这种情况下࿰…...
共铸价值:RWA 联合曲线价值模型,撬动现实资产生态
摘要 本文提出了一种针对真实资产(RWA)产业的联合曲线激励模型,将劳动与数据贡献映射为曲线价值,并基于固定档位与指数衰减奖励发放总计 2.1亿积分。该模型结合了去中心化定价与平滑递减机制,不仅为早期贡献者提供更高…...
【libuv】基于libuv的exe链接错误
vs2017构建 基于libuv的exe链接错误 1>libuv.lib(util.obj) : error LNK2019: unresolved external symbol __imp__GetAdaptersAddresses20 referenced in function _uv_interface_addresses 1>libuv.lib(util.obj) : error LNK2019: unresolved external symbol __imp__…...
什么是生成式 AI (GenAI)?
在科技飞速发展的今天,人工智能(AI)已不再是一个遥远的概念,而是悄然融入了我们的日常生活。从智能语音助手到自动驾驶汽车,从个性化推荐系统到医疗诊断辅助,AI正以前所未有的速度改变着世界。然而,在AI的广阔领域中,有一个分支正逐渐崭露头角,成为推动未来创新的关键…...
爬虫准备前工作
1.Pycham的下载 网址:PyCharm: The only Python IDE you need 2.Python的下载 网址:python.org(python3.9版本之后都可以) 3.node.js的下载 网址:Node.js — 在任何地方运行 JavaScript(版本使用18就可…...
JVM——JVM 是如何处理异常的?
JVM 是如何处理异常的? 在 Java 编程语言中,异常处理是一种强大的机制,用于应对程序运行时出现的错误和意外情况。而 Java 虚拟机(JVM)作为 Java 程序运行的核心环境,在异常处理过程中扮演着至关重要的角色…...
网络基础-----C语言经典题目(12)
一、MTU,IP 协议头中 TTL是什么? MTU 指的是网络层能够接收的最大数据包大小,单位为字节。主要作用是限制数据链路层一次能够传输的数据量。 IP 协议头中的 TTL 是 IP 数据头部的一个 8 位字段,最初它的设计目的是限制数据包在网络…...
【第十六届蓝桥杯省赛】比赛心得与经验分享(PythonA 组)
文章目录 一、我的成绩二、我的备赛经历三、如何备赛(个人观点)1. 基础语法2. 数据结构3. 算法4. 数学 四、做题技巧与注意事项五、我的题解试题A 偏蓝 🏆100%试题B IPV6 🏆0%试题C 2025图形 🏆100%试题D 最大数字 &am…...
解决Maven项目中报错“java不支持版本6即更高的版本 7”
错误背景 当Maven项目编译或运行时出现错误提示 Java不支持版本6即更高的版本7,通常是由于项目配置的JDK版本与当前环境或编译器设置不一致导致的。例如: 项目配置的Java版本为6或7,但实际使用的是JDK 17。Maven或IDE的编译器未正确指定目标…...
MySQL--索引入门
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 Mysql在存储数据之外,数据库系统各种还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据…...
【网络原理】深入理解HTTPS协议
本篇博客给大家带来的是网络原理的知识点, 由于时间有限, 分三天来写, 本篇为线程第三篇,也是最后一篇. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动…...
利用Elixir中的原子特性 + 错误消息泄露 -- Atom Bomb
题目信息: This new atom bomb early warning system is quite strange… 题目使用 elixir 语言 一开始,我们会访问 /page.html <!DOCTYPE html> <!-- 设定文档语言为英语 --> <html lang"en"> <head><!-- 设定字符编码为UTF-8 --><…...
机器人--STM32
STM32启动模式 1,从主闪存存储启动器启动(默认) 2,从系统存储启动器启动 下载程序时需要使用的启动方式。 3,从内置的SRAM启动...
LVGL -文本显示 英文、中文
1 文本 在 LVGL 中,文本控件(Label)是一种基本的 UI 组件,用于显示文本信息。文本控件可以用于各种场景,如显示状态信息、提示消息、标题等。在图形用户界面(GUI)开发中,文本是传达信息和指导用户的重要组成部分。为了有效地展示文本,以下是与文本相关的几个关键方面…...
Java面试资源获取
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 **1. GitHub开源项目****2. 技术博客与社区*…...
探索 Spring AI 的 ChatClient API:构建智能对话应用的利器
探索 Spring AI 的 ChatClient API:构建智能对话应用的利器 前言 在当今人工智能蓬勃发展的时代,智能对话系统成为了众多应用的核心组成部分。无论是客服机器人、智能助手还是聊天应用,都离不开高效、灵活的对话处理能力。Spring AI 作为 S…...
Java大师成长计划之第11天:Java Memory Model与Volatile关键字
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在多线程编程中,线程的执…...
java学习之数据结构:一、数组
主要是对数组所有的东西进行总结,整理 适合小白~ 目录 1.什么是数组 1.1数组定义 1.2数组创建 1)静态创建 2)动态创建 1.3数组遍历 1)for和while遍历 2)foreach遍历 2.数组越界问题及解决 2.1数组越界问题 2…...
Oracle OCP认证考试考点详解083系列04
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 16. 第16题: 题目 解析及答案: 关于使用恢复管理器(RMAN)恢复表,以下哪三项是…...
MARM:推荐系统中的记忆增强突破
文章目录 1. 背景1.1 模型规模与推荐系统的挑战1.2 缓存技术在推荐系统中的潜力1.3 推荐系统中的数据与计算需求1.4 复杂度对比1.5 MARM模型的创新性 2. 方法2.1 流程2.1.1 序列生成器2.1.2 外部缓存查找2.1.3 多目标注意力机制2.1.4 发结果到缓存 **2.2 MARM与SIM**2.2.1 SIM的…...
INP指标
什么是INP(Interaction to Next Paint) 参考网站:webVital-INP文档 定义与核心目标 INP 是一项稳定的 Core Web Vitals 指标,通过统计用户访问期间所有符合条件的互动约定时间,评估网页对用户操作的总体响应能力。最…...
Flink 的状态机制
在实时流处理领域,状态管理是构建复杂业务逻辑的核心能力。Apache Flink 通过统一的状态抽象和高效的容错机制,为开发者提供了从毫秒级窗口聚合到 TB 级历史数据关联的全场景支持。本文将深入剖析 Flink 状态机制的底层原理,结合实际案例展示…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.1 数据库核心概念与PostgreSQL技术优势
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 深度解析PostgreSQL核心架构与技术优势:从数据库原理到实战场景1.1 数据库核心概念与PostgreSQL技术优势1.1.1 关系型数据库核心架构解析1.1.1.1 数据库系统的底…...
linux下,ollama会把模型文件保存在哪里?
文章目录 运行ollama,有两种形式,估计得分开讨论首先是使用自动启动的ollama:先跑个“小一点的大模型”但是现在模型文件存在哪儿呢?运行ollama,有两种形式,估计得分开讨论 我们用两种方式,来运行ollama。 首先是使用自动启动的ollama: ps -aux | grep ollama系统自…...
EMMC存储性能测试方法
记于 2022 年 9 月 15 日 EMMC存储性能测试方法 - Wesley’s Blog 参考Android-emmc性能测试 | 一叶知秋进行实践操作 dd 命令 页面缓存 为了测试 emmc 的真实读写性能,我们需要先把页面缓存给清理: echo 1 > /proc/sys/vm/drop_caches console:…...
19. LangChain安全与伦理:如何避免模型“幻觉“与数据泄露?
引言:当AI成为企业"数字员工"时的责任边界 2025年某金融机构因AI客服泄露用户信用卡信息被罚款2300万美元。本文将基于LangChain的安全架构与Deepseek-R1的合规实践,揭示如何构建既强大又安全的AI系统。 一、AI安全风险矩阵 1.1 2025年最新威…...
5月3日日记
上午睡到自然醒(其实六点多被我爸叫起来抢火车票,发现明天中午的软卧候补上了,挺好的)然后继续睡到快10点。 中午吃的什么来着,好像是西红柿炒鸡蛋和藜麦饭,有个鱼不是很想吃就没吃 中午打了两把吃鸡&…...
C++类_构造函数
在 C11 里,类的构造函数有多种类型,下面为你详细介绍各类构造函数并给出示例代码。 1. 默认构造函数 默认构造函数是没有参数的构造函数,要是没有为类定义任何构造函数,编译器会自动生成一个默认构造函数。 2. 带参数的构造函数…...
【React】Hooks useReducer 详解,让状态管理更可预测、更高效
1.背景 useReducer是React提供的一个高级Hook,没有它我们也可以正常开发,但是useReducer可以使我们的代码具有更好的可读性,可维护性。 useReducer 跟 useState 一样的都是帮我们管理组件的状态的,但是呢与useState不同的是 useReducer 是集…...
Runnable组件重试机制降低程序错误率
一、LangChain 重试机制深度解析 当构建生产级AI应用时,with_retry() 机制可有效提升系统容错性,典型应用场景包括: API调用频率限制时的自动恢复模型服务临时不可用的故障转移网络波动导致的瞬时异常处理 参数详解与配置策略 1. 参数配置…...
纹理过滤方式和纹理包裹方式
纹理过滤方式 纹理过滤方式有临近过滤(Nearest)和双线性插值过滤(Linear),什么时候用什么过滤方式其实看个人选择,区别就是临近过滤是当需要的像素大于图片像素时候,一些像素点需要复用与他相近…...
55.[前端开发-前端工程化]Day02-包管理工具npm等
包管理工具详解 npm、yarn、cnpm、npx、pnpm 1 npm包管理工具 代码共享方案 包管理工具npm 2 package配置文件 npm的配置文件 方式二 常见的配置文件 常见的属性 常见的属性 常见的属性 依赖的版本管理 常见属性 npm install 命令 项目安装 3 npm install原理 npm instal…...
Maven安装配置以及Idea中的配置教程
一、下载Maven 我使用的是3.9.9的版本: 下载地址:Download Apache Maven – Maven 二、安装 将下载好的Maven压缩包解压到一个路径不包含中文的文件夹: 三、配置环境变量 以win11系统为例: 1.鼠标右键此电脑->属性->…...