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/8/15 22:07:05 阅读更多 →
KiCAD工程创建与原理图设计入门指南

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

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

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

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

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

2026/8/15 22:07:05 阅读更多 →

最新新闻

Apache HTTP Server 从零安装到生产环境配置实战指南

Apache HTTP Server 从零安装到生产环境配置实战指南

1. 从零到一:为什么Apache依然是Web服务的基石如果你刚接触服务器运维,或者准备自己搭建一个网站,那么“Apache”这个名字你肯定绕不过去。即使现在Nginx、Caddy等后起之秀风头正劲,Apache HTTP Server(简称Apache&…

2026/8/15 22:46:31 阅读更多 →
数学建模实战:从数据预处理到模型优化的完整解题思路复盘

数学建模实战:从数据预处理到模型优化的完整解题思路复盘

1. 项目概述:一次从混沌到清晰的建模实战复盘2020年的数学建模国赛C题,对于很多参赛队伍来说,可能是一段既充满挑战又收获颇丰的记忆。我作为一支队伍的队长兼主力建模手,完整地经历了从拿到赛题时的茫然,到逐步拆解、…

2026/8/15 22:46:31 阅读更多 →
Spring Cloud Gateway 自定义过滤器

Spring Cloud Gateway 自定义过滤器

文章目录Spring Cloud Gateway 自定义过滤器一、依赖版本二、两种自定义过滤器三、Pre 与 Post四、执行顺序五、自定义 GatewayFilter(普通)5.1 实现类5.2 yml 配置5.3 带参过滤器 shortcut 写法(可选)六、自定义 GlobalFilter&am…

2026/8/15 22:46:31 阅读更多 →
还在为Wand专业版续费?试试这款开源增强器,解锁Pro还送手机遥控

还在为Wand专业版续费?试试这款开源增强器,解锁Pro还送手机遥控

还在为Wand专业版续费?试试这款开源增强器,解锁Pro还送手机遥控 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 晚上想开两…

2026/8/15 22:45:30 阅读更多 →
破解物理AI技术困局(33):TVA达成意图预判与主动配合

破解物理AI技术困局(33):TVA达成意图预判与主动配合

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它融合深度强化学习(DRL)、卷积神经…

2026/8/15 22:45:30 阅读更多 →
AI Agent白手起家74: CrewAI 核心组件详解——从智能体到知识库

AI Agent白手起家74: CrewAI 核心组件详解——从智能体到知识库

纲要 组件概览:Agent、Task、Crew、Flow、Knowledge、MemoryAgent:团队中的最小执行单元 YAML 配置化定义纯代码定义运行代码与工具集成 Task:智能体的工作任务 配置与依赖关系结构化输出 Crew:组建专业团队 配置式与代码式两种风…

2026/8/15 22:45:30 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/15 12:59:14 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →