SQL GROUP BY 详解:从分类汇总到多维度聚合实战
1. 从一次数据统计的“翻车”说起最近在帮一个刚入行的朋友看代码他负责一个简单的用户行为日志分析。需求听起来很简单统计每天每个用户的操作次数。他写了个查询跑出来的结果却让他傻眼了——数据量对不上而且出现了很多重复的条目。他把代码发给我一看问题就出在一个最基础但又最容易被误解的SQL语句上GROUP BY。这让我想起自己刚接触数据库那会儿也在这个地方栽过跟头。GROUP BY看起来就是“分组”嘛把相同的东西放一起不就行了但实际操作起来你会发现它远不止“放一起”那么简单。它涉及到数据如何被聚合、哪些字段能出现在查询结果里以及分组背后的计算逻辑。很多教程讲得太快或者只给语法导致新手用起来总是云里雾里要么报错要么结果不对。所以今天我们就彻底把这个基础但至关重要的知识点掰开揉碎了讲。我会用最直白的语言和大量的例子带你从零理解GROUP BY。无论你是完全没接触过SQL的小白还是用过但总觉得心里不踏实的朋友这篇文章都能让你彻底搞懂它以后用起来心里有底。2. GROUP BY 到底是什么先忘掉“分组”很多教程一上来就说“GROUP BY 用于分组”这个说法其实容易让人先入为主。我们换个更准确的角度来理解GROUP BY 的核心是“分类汇总”。想象一下你有一筐混合的水果里面有苹果、香蕉、橘子。老板让你做个库存清单你需要知道每种水果各有多少个。你会怎么做你肯定会先把所有苹果挑出来放一堆数一数再把所有香蕉挑出来放一堆数一数橘子也一样。最后你的清单上写着苹果XX个香蕉XX个橘子XX个。在这个例子里那筐混合水果就是你的数据库表。“按水果种类”这个动作就是GROUP BY。“数一数个数”这个动作就是聚合函数COUNT(*)。最后那份清单就是你的查询结果。所以GROUP BY的本质是先按照你指定的一个或多个列把数据表中的所有行分成不同的“组”或“类”。然后对每一个组内的所有行进行某种计算比如计数、求和、求平均最终每个组只输出一行汇总结果。它改变了你观察数据的维度。从不分组时一行代表一条详细记录变成了分组后一行代表一个类别的汇总信息。3. 动手前准备创建我们的实验数据光说不练假把式我们直接上手操作。为了演示我们先创建一个简单的数据表并插入一些数据。你可以把这个SQL在任何MySQL客户端如MySQL Workbench, Navicat或命令行里运行。-- 创建一个名为 sales 的销售记录表 CREATE TABLE sales ( id INT PRIMARY KEY AUTO_INCREMENT, -- 记录ID自增长 sale_date DATE, -- 销售日期 product_name VARCHAR(50), -- 产品名称 salesperson VARCHAR(50), -- 销售员 amount DECIMAL(10, 2) -- 销售金额 ); -- 插入一些示例数据 INSERT INTO sales (sale_date, product_name, salesperson, amount) VALUES (2023-10-23, 笔记本电脑, 张三, 5500.00), (2023-10-23, 鼠标, 李四, 88.00), (2023-10-23, 笔记本电脑, 张三, 5200.00), (2023-10-24, 键盘, 王五, 200.00), (2023-10-24, 鼠标, 李四, 88.00), (2023-10-24, 显示器, 张三, 1500.00), (2023-10-25, 笔记本电脑, 张三, 5800.00), (2023-10-25, 键盘, 王五, 200.00), (2023-10-25, 鼠标, 李四, 95.00);插入后表里的数据大概是这样的idsale_dateproduct_namesalespersonamount12023-10-23笔记本电脑张三5500.0022023-10-23鼠标李四88.0032023-10-23笔记本电脑张三5200.0042023-10-24键盘王五200.0052023-10-24鼠标李四88.0062023-10-24显示器张三1500.0072023-10-25笔记本电脑张三5800.0082023-10-25键盘王五200.0092023-10-25鼠标李四95.00有了这份数据我们就可以开始各种GROUP BY实验了。4. 单字段分组最常用的场景拆解我们先从最简单的开始只按照一个列进行分组。4.1 基础计数每个销售员卖了多少单需求统计每个销售员总共完成了多少笔销售交易。SELECT salesperson, COUNT(*) AS order_count FROM sales GROUP BY salesperson;逐句解释SELECT salesperson, ... 我要在结果里看到“销售员”这个信息。COUNT(*) AS order_count 我要对数据进行“计数”操作。COUNT(*)会数每一个分组里有多少行数据。AS order_count是给这个计数结果起个别名让结果列更易读。FROM sales 数据来自sales表。GROUP BY salesperson关键在这里它告诉数据库“请按照salesperson列的值把所有行分成不同的组。所有salesperson是‘张三’的行是一组‘李四’的行是另一组‘王五’的又是另一组。”执行过程脑补数据库引擎会扫描整个sales表遇到“张三”把他放到“张三组”。遇到“李四”放到“李四组”。又遇到“张三”还是放到“张三组”。... 扫描完后它得到了三个组组1(张三: 第1,3,6,7行)组2(李四: 第2,5,9行)组3(王五: 第4,8行)。 然后对每个组执行SELECT指定的操作取出组名salesperson计算组内行数COUNT(*)。查询结果salespersonorder_count张三4李四3王五2注意这里COUNT(*)数的是每个销售员对应的行数也就是订单数。如果同一个订单有多条记录比如一个订单多个商品那逻辑就不一样了这取决于你的表结构设计。理解COUNT计数的对象非常重要。4.2 求和与求平均每个产品的总销售额和平均售价需求看看每个产品总共卖了多少钱以及平均每个卖了多少钱。SELECT product_name, SUM(amount) AS total_sales, -- 总销售额 AVG(amount) AS avg_price, -- 平均售价 COUNT(*) AS sales_times -- 销售次数 FROM sales GROUP BY product_name;这里引入了两个新的聚合函数SUM(amount) 对每个分组内的amount字段进行求和。AVG(amount) 对每个分组内的amount字段求平均值。执行过程按product_name分组得到“笔记本电脑”组第1,3,7行、“鼠标”组第2,5,9行、“键盘”组第4,8行、“显示器”组第6行。对“笔记本电脑”组SUM(amount) 5500 5200 5800 16500AVG(amount) 16500 / 3 5500COUNT(*) 3。其他组同理。查询结果product_nametotal_salesavg_pricesales_times笔记本电脑16500.005500.003鼠标271.0090.333键盘400.00200.002显示器1500.001500.001实操心得当你同时使用多个聚合函数时它们都是独立对同一个分组内的数据进行计算的。SUM、AVG、COUNT之间不会互相干扰。另外AVG在计算时会自动忽略NULL值。如果amount有为NULL的记录它不会被计入总和分母计数也会相应减少这点需要注意。4.3 最值查找每天的单笔最高销售额需求找出每一天里金额最大的那一笔销售是多少。SELECT sale_date, MAX(amount) AS max_amount FROM sales GROUP BY sale_date;这里使用了MAX聚合函数MAX(amount) 找出每个分组内amount字段的最大值。查询结果sale_datemax_amount2023-10-235500.002023-10-241500.002023-10-255800.00这个结果告诉我们在10月23日单笔销售最高是5500元对应id为1的记录10月24日最高是1500元10月25日最高是5800元。常见误解纠正这个查询只能返回最大金额是多少而不能直接告诉你这笔最大金额的销售对应的产品是什么、销售员是谁。因为SELECT列表里除了分组字段sale_date就只能放聚合函数MAX(amount)。如果你想找到“每天销售额最高的那笔记录的所有信息”需要用更高级的方法如子查询或窗口函数这不是基础GROUP BY能直接解决的。这是新手最容易困惑的点之一。5. 多字段分组组合维度下的精细统计单字段分组能满足很多需求但现实情况往往更复杂。比如老板可能问“张三每天卖笔记本电脑总共卖了多少钱” 这就涉及到“销售员”和“产品”两个维度了。这时候就需要多字段分组。5.1 二维分组每个销售员每天的总销售额需求细化到人和天看每日业绩。SELECT salesperson, sale_date, SUM(amount) AS daily_sales FROM sales GROUP BY salesperson, sale_date ORDER BY salesperson, sale_date; -- ORDER BY 用于排序让结果更清晰关键理解GROUP BY salesperson, sale_date这不再是先按人分再按天分或者反过来。它的意思是将salesperson和sale_date的组合值完全相同的行归为同一组。你可以把它想象成一个二维表格横轴是销售员纵轴是日期每个单元格就是一个独立的分组。执行过程脑补数据库会生成类似这样的分组键(张三 2023-10-23), (张三 2023-10-24), (张三 2023-10-25), (李四 2023-10-23) ... 只有这两列值都相同的行才会被分到一起。 例如(张三 2023-10-23)这个组包含了第1行和第3行都是张三在23号卖笔记本电脑的记录。查询结果salespersonsale_datedaily_sales张三2023-10-2310700.00张三2023-10-241500.00张三2023-10-255800.00李四2023-10-2388.00李四2023-10-2488.00李四2023-10-2595.00王五2023-10-24200.00王五2023-10-25200.00从这个结果我们可以清晰地看到每个销售员每天的业绩总和。5.2 三维分组每天每个产品的销售次数我们再增加一个维度。需求统计每一天、每一个产品被销售了多少次即订单行数。SELECT sale_date, product_name, COUNT(*) AS sales_count FROM sales GROUP BY sale_date, product_name ORDER BY sale_date, product_name;理解GROUP BY sale_date, product_name分组键变成了 (日期 产品)。例如(2023-10-23 笔记本电脑) 是一个组(2023-10-23 鼠标) 是另一个组。查询结果sale_dateproduct_namesales_count2023-10-23笔记本电脑22023-10-23鼠标12023-10-24键盘12023-10-24鼠标12023-10-24显示器12023-10-25键盘12023-10-25笔记本电脑12023-10-25鼠标1这个结果非常细致它告诉我们10月23日笔记本电脑卖了2次鼠标卖了1次10月24日键盘、鼠标、显示器各卖了1次等等。核心要点多字段GROUP BY时分组的粒度变得更细结果集的行数通常会更多因为组合更多。它用于回答更具体、更交叉的统计问题。选择哪些字段进行分组完全取决于你的业务问题。6. GROUP BY 的黄金搭档HAVING 子句WHERE子句用于在分组前对原始数据进行过滤。但有时候我们需要对分组后的聚合结果进行过滤。比如“找出总销售额超过10000元的销售员”。这时候WHERE就无能为力了因为它无法识别SUM(amount)这样的聚合值。这就需要HAVING子句出场。WHEREvsHAVING的核心区别WHERE在分组和聚合计算之前执行作用于单条原始记录的字段。不能使用聚合函数。HAVING在分组和聚合计算之后执行作用于分组后的聚合结果。必须使用聚合函数或分组字段。6.1 用 HAVING 过滤聚合结果例1找出销售订单数超过2笔的销售员。SELECT salesperson, COUNT(*) AS order_count FROM sales GROUP BY salesperson HAVING COUNT(*) 2; -- HAVING 过滤分组后的计数结果执行顺序FROM sales-GROUP BY salesperson- 计算COUNT(*)-HAVING COUNT(*) 2-SELECT输出。 结果只会包含“张三”4笔和“李四”3笔。“王五”因为只有2笔被过滤掉了。例2找出总销售额超过5000元的产品。SELECT product_name, SUM(amount) AS total_sales FROM sales GROUP BY product_name HAVING SUM(amount) 5000;结果只会显示“笔记本电脑”16500元。例3找出平均销售额高于100元且总销售次数大于1的产品。这是一个组合条件过滤。SELECT product_name, AVG(amount) AS avg_sales, COUNT(*) AS sales_times FROM sales GROUP BY product_name HAVING AVG(amount) 100 AND COUNT(*) 1;这个查询会过滤出那些既卖得贵均价100又卖得多次数1的产品。根据我们的数据“笔记本电脑”和“键盘”符合条件。避坑指南千万不要在WHERE子句里使用聚合函数比如WHERE SUM(amount) 1000这一定会报错。因为数据库在执行WHERE时根本还没有进行分组和聚合计算它不知道SUM(amount)是什么。务必牢记行级过滤用WHERE组级过滤用HAVING。7. 新手必踩的坑与核心规则详解理解了基本操作我们来看看那些让新手头疼的错误和规则。弄懂这些你才算真正掌握了GROUP BY。7.1 “SELECT列表中的列无效”错误这是最经典的错误。我们来看一个会报错的例子-- 错误示例 SELECT salesperson, product_name, amount FROM sales GROUP BY salesperson;执行这个语句MySQL会报一个错误大意是product_name和amount字段没有在GROUP BY子句中也不是聚合函数因此SELECT列表中不能出现它们。为什么回想一下分组的过程数据库把多条记录比如所有“张三”的记录压缩成了一行。那么问题来了在“张三”这一组里product_name有可能是“笔记本电脑”也可能是“显示器”amount有可能是5500也可能是1500。当你只GROUP BY salesperson时数据库无法确定在最终输出的那一行里product_name和amount应该显示哪个值。它必须得到一个唯一、确定的值。核心规则务必记住在使用了GROUP BY的查询中SELECT后面只能出现两种类型的列出现在GROUP BY子句中的列。因为它们是分组的依据在每个组内这个值是唯一确定的。使用聚合函数如SUM,COUNT,AVG,MAX,MIN包裹的列。因为聚合函数会将组内多个值计算成一个确定的值。在上面的错误示例中salesperson符合规则1可以出现在SELECT中。但product_name和amount既不在GROUP BY里也没被聚合函数处理所以数据库拒绝执行。修正方法如果你想看每个销售员涉及的产品和金额你有几种选择如果你想知道所有产品使用GROUP_CONCAT聚合函数它可以把组内的多个值拼接成一个字符串。SELECT salesperson, GROUP_CONCAT(product_name) AS products, -- 拼接产品名 GROUP_CONCAT(amount) AS amounts -- 拼接金额 FROM sales GROUP BY salesperson;结果可能像这样张三 | 笔记本电脑笔记本电脑显示器笔记本电脑 | 5500.005200.001500.005800.00如果你只想看聚合信息那就只选择聚合列。SELECT salesperson, COUNT(DISTINCT product_name) AS product_types, -- 销售了多少种产品 SUM(amount) AS total_amount FROM sales GROUP BY salesperson;7.2 关于 COUNT 的细节COUNT(*) vs COUNT(column) vs COUNT(DISTINCT column)COUNT函数很常用但用法不同结果差异很大。COUNT(*) 统计行数。只要这一行存在不管它的列是不是NULL都会被计数。最常用。COUNT(column_name) 统计指定列中非 NULL 值的数量。如果该列某行为NULL则不计入。COUNT(DISTINCT column_name) 统计指定列中不重复的非 NULL 值的数量。常用于计算唯一值个数。我们来修改一下数据假设第9条记录的salesperson字段为NULL。-- 更新第9行将销售员设为NULL UPDATE sales SET salesperson NULL WHERE id 9; -- 对比三种COUNT SELECT COUNT(*) AS total_rows, -- 总行数 COUNT(salesperson) AS not_null_salesperson, -- 非NULL的销售员数 COUNT(DISTINCT salesperson) AS unique_salesperson -- 不重复的销售员数 FROM sales;查询结果total_rowsnot_null_salespersonunique_salesperson983解释总共有9行。salesperson列有8个非NULL值因为第9行是NULL。不重复的销售员有3个张三、李四、王五NULL不被计入DISTINCT。实操心得在统计“有多少个不同的用户/商品/日期”时一定要用COUNT(DISTINCT ...)。用COUNT(*)或COUNT(column)得到的是记录数而不是唯一值数量这会导致数据被严重夸大。7.3 分组后的排序ORDER BY 与 GROUP BY 的配合分组后的结果集默认顺序是不确定的。为了让结果更易读我们通常会用ORDER BY进行排序。ORDER BY可以基于分组字段也可以基于聚合函数的结果。-- 按总销售额从高到低排序 SELECT salesperson, SUM(amount) AS total_sales FROM sales GROUP BY salesperson ORDER BY total_sales DESC; -- 使用别名排序DESC表示降序 -- 按销售员姓名排序再按销售日期排序 SELECT salesperson, sale_date, SUM(amount) AS daily_sales FROM sales GROUP BY salesperson, sale_date ORDER BY salesperson ASC, sale_date ASC; -- ASC表示升序可省略执行顺序再强调FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY。ORDER BY是最后一步所以它可以使用SELECT中定义的别名如total_sales。8. 综合实战解决一个真实的业务问题让我们把所有知识点串起来解决一个稍微复杂点的业务场景。业务需求为销售部门生成一份报告需要列出在最近三天内2023-10-23至2023-10-25总销售额超过2000元的销售员。报告需包含销售员姓名、总销售额、平均单笔销售额、销售单数。并按照总销售额从高到低排列。同时如果某个销售员卖过“显示器”这个产品需要在备注里标出。这个需求融合了过滤、分组、聚合、排序和条件判断。SELECT salesperson, SUM(amount) AS total_sales, AVG(amount) AS avg_order_amount, COUNT(*) AS order_count, -- 使用CASE WHEN进行条件判断生成备注 CASE WHEN MAX(CASE WHEN product_name 显示器 THEN 1 ELSE 0 END) 1 THEN 销售过显示器 ELSE 未销售显示器 END AS remark FROM sales -- 首先用WHERE过滤出指定日期的原始数据 WHERE sale_date BETWEEN 2023-10-23 AND 2023-10-25 -- 然后按销售员分组 GROUP BY salesperson -- 接着用HAVING过滤分组后的聚合结果总销售额2000 HAVING SUM(amount) 2000 -- 最后按总销售额降序排列 ORDER BY total_sales DESC;逐段解析WHERE sale_date BETWEEN ... 在分组前先筛选出日期范围内的数据。这是行级过滤。GROUP BY salesperson 将过滤后的数据按销售员分组。聚合计算 对每个组计算SUM(amount)、AVG(amount)、COUNT(*)。CASE WHEN ... THEN ... ELSE ... END 这是一个条件表达式。我们用它来判断一个销售员是否卖过“显示器”。CASE WHEN product_name 显示器 THEN 1 ELSE 0 END 对组内的每一行进行判断如果是显示器就标记为1否则为0。这样组内会得到一个由0和1组成的序列。MAX(...) 1 取这个序列的最大值。如果组内曾经出现过1即卖过显示器那么最大值就是1如果全是0没卖过最大值就是0。根据最大值是否为1给remark字段赋予不同的文本值。为什么用MAX聚合函数因为CASE WHEN表达式生成了每行的标量值0或1我们需要一个聚合函数这里是MAX来将这些行级结果汇总成一个组级结果这样才能符合SELECT的规则。这是一种非常实用的技巧。HAVING SUM(amount) 2000 对分组聚合后的结果进行过滤只保留总销售额大于2000的组。ORDER BY total_sales DESC 对最终结果按总销售额降序排列。查询结果基于我们最初的数据第9行未更新salespersontotal_salesavg_order_amountorder_countremark张三18000.004500.004销售过显示器李四271.0090.333未销售显示器王五因为总销售额只有400元不满足HAVING条件所以没有出现在结果中。通过这个综合例子你应该能体会到GROUP BY是SQL数据分析的基石。结合WHERE、HAVING、聚合函数和各种表达式你可以应对非常复杂的统计汇总需求。关键在于清晰地理解数据流动的顺序从原始表过滤到分组到组内聚合计算再到聚合结果过滤最后排序输出。把这个流程印在脑子里写起查询来就会有条理得多。

相关新闻

数学建模论文写作模板:八段式结构详解与避坑指南

数学建模论文写作模板:八段式结构详解与避坑指南

1. 从“无从下笔”到“框架清晰”:一个模板的价值如果你是一名数学建模竞赛的新手,或者对学术论文写作感到陌生,看到“数学建模论文”这几个字,第一反应是不是大脑一片空白?不知道从何写起,不知道结构怎么安…

2026/10/19 4:12:25 阅读更多 →
KiCAD工程创建与原理图设计入门指南

KiCAD工程创建与原理图设计入门指南

1. 从零开始:为什么需要一个规范的KiCAD工程很多刚接触电子设计自动化(EDA)工具的朋友,拿到KiCAD后可能会直接新建一个原理图文件就开始画图。这看似高效,实则埋下了不少隐患。我见过不少项目,文件散落在各…

2026/10/18 3:07:29 阅读更多 →
APMCM数学建模竞赛图像边缘分析:从Canny算子到特征工程的完整解题指南

APMCM数学建模竞赛图像边缘分析:从Canny算子到特征工程的完整解题指南

1. 项目概述:一次深度复盘的价值最近在整理资料库,翻到了2020年第十届APMCM亚太地区大学生数学建模竞赛A组的赛题。虽然已经过去几年,但每次重读这些题目,依然能感受到当时那种紧张、烧脑又充满挑战的氛围。对于正在备赛的同学&am…

2026/10/18 3:07:32 阅读更多 →

最新新闻

基于YOLOv8与PyQt5的无人机实时检测系统实战

基于YOLOv8与PyQt5的无人机实时检测系统实战

1. 项目概述与方案选型1.1 为什么选择YOLOv8目标检测框架先聊个实质性的问题:无人机检测这个任务,市面上可选的目标检测框架很多,从早期的Faster R-CNN到SSD,再到YOLO系列的各种变体,为什么我最终锁定YOLOv8来做这个项…

2026/10/19 4:11:36 阅读更多 →
开放式代码评审实践:从流程设计到团队协作落地指南

开放式代码评审实践:从流程设计到团队协作落地指南

我一直觉得,代码评审这件事,最难的从来不是技术,而是怎么让团队里的人真的愿意认真看别人的代码,并且把评审当成自己分内的事,而不是流程上不得不走的过场。今天想聊的这套 open-code-review,是我从几个项目…

2026/10/19 4:11:36 阅读更多 →
开放式代码审查(Open Code Review)落地指南:从流程搭建到团队质量提升

开放式代码审查(Open Code Review)落地指南:从流程搭建到团队质量提升

我第一次真正感受到开放式代码审查(open-code-review)的价值,是在一次持续了整整一周的 PR 讨论里。那个 PR 改的是团队最核心的缓存模块,最初只有两个资深开发在底下互相对话,后来讨论被转到团队频道,测试…

2026/10/19 4:11:36 阅读更多 →
数据链路层核心机制与排障实战:从成帧到CRC

数据链路层核心机制与排障实战:从成帧到CRC

1. 数据链路层到底在解决什么问题很多朋友学网络到 IP 地址、路由协议的时候觉得津津有味,一到数据链路层就有点提不起劲。原因很简单:这一层离应用层太远,平时写程序、配服务器基本接触不到,学起来又全是 MAC 地址、帧、CRC 这些…

2026/10/19 4:11:36 阅读更多 →
Python aiidalab-vapory 包详解与实战案例

Python aiidalab-vapory 包详解与实战案例

1. 引言aiidalab-vapory 是一个基于 AiiDA 生态的 Python 包,用于在 Jupyter Notebook 环境中对晶体结构进行三维可视化。它结合了 AiiDA 的数据管理能力和 Vapor 的渲染能力,让科研人员可以在交互式环境中直观地查看、操作和分享晶体结构。本文将从功能…

2026/10/19 4:11:36 阅读更多 →
C# WinForms用iTextSharp导出PDF:核心链路与避坑实战

C# WinForms用iTextSharp导出PDF:核心链路与避坑实战

简介:面向C# WinForm初学者的PDF导出实战demo,演示如何在桌面窗体中借助itextsharp类库将文本框内容快速生成PDF文件。资源包共含53个文件,压缩包大小4.17MB,主要包含C#源程序文件、可执行文件、itextsharp.dll依赖库、配置文件及…

2026/10/19 4:10:35 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →