MySQL GROUP_CONCAT 组内排序与数据聚合的实用笔记
整理 GROUP_CONCAT 排序、去重、分隔符和长度限制等实际使用细节。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-08-20 12:00:46 SQL 数据库 数据查询
写业务统计 SQL 时,GROUP BY 配 CASE WHEN 是很常用的组合。不少需要分类聚合的需求,靠这俩就能直接出结果,不用套多层子查询绕来绕去。
拿常见的销售表举个例子,表名 Sales,字段有 SaleID(销售ID)、Store(店铺)、Employee(员工)、Amount(销售额)、SaleDate(销售日期)。现在要按店铺和员工两个维度分组,分别算出单笔大于 500 的销售额总和,以及单笔小于等于 500 的销售额总和。
直接在聚合函数里嵌 CASE WHEN 就行,写法如下:
SELECT
Store,
Employee,
SUM(CASE WHEN Amount > 500 THEN Amount ELSE 0 END) AS HighSales,
SUM(CASE WHEN Amount <= 500 THEN Amount ELSE 0 END) AS LowSales
FROM Sales
GROUP BY Store, Employee;
语句里两个 SUM 分别对应两类金额统计:符合条件就累加对应的销售额,不符合就加 0,最后给结果列起个别名。
GROUP BY 后面跟上店铺和员工两个字段,最终结果就会按这两个维度,聚合出对应的高低销售额数值。
具体选哪个聚合函数来搭配 CASE WHEN,完全看实际的业务需求,没有固定标准。常用的就那几个:COUNT 用来统计符合条件的行数,SUM 对数值列做累加,AVG 计算平均值,MAX 和 MIN 分别取分组内的最大值和最小值。
这几个基本能覆盖绝大多数日常统计场景。
很多人写的时候会纠结不同聚合函数的性能差异,其实没必要。
查询的实际执行效率,更多和数据库优化器的策略、索引有没有命中、数据量大小,以及整个查询的复杂度有关。绝大多数场景下,优化器会自动生成合理的执行计划,聚合函数本身带来的性能差别微乎其微。
这类写法其实就是把条件判断下沉到聚合步骤里,一次分组就能输出多列统计结果。
写的时候注意条件分支的边界值别写错,SELECT 里的非聚合字段和 GROUP BY 后面的字段对应好,再配合上合适的索引,基本就能满足大部分分类统计需求了。
上一篇: 纯CSS实现四种旋转加载效果
整理 GROUP_CONCAT 排序、去重、分隔符和长度限制等实际使用细节。
一篇随手记,整理MySQL、SQL Server、Oracle、PostgreSQL里把日期转成yyyy-mm-dd的几种写法,省得每次都要翻文档。
本文深入探讨SQL表创建语句的格式化技巧,包括如何通过字段对齐、选项分段和清晰注释,有效提升代码的可读性与可维护性。我们还将强调数据库兼容性与选项适用性,助你编写出整洁、高效且易于团队协作的SQL代码。
本文将深入探讨MySQL中DATETIME类型的全方位操作。从精确到秒级的时间存储机制,到字段规范定义、高效数据插入方法,再到灵活的格式化输出技巧,我们为您提供一套完整的实践方案。同时,详细解析开发中常见的时间偏移、时分秒丢失等问题及其规避策略,助您构建健壮的时间数据处理系统。
连接本地项目到远程数据库(如百度云数据库)涉及一系列步骤,以下是一个详细的指南,帮助你完成这个过程。1.准备阶段1.1创建远程数据库在百度云数据库控制台中创建一个新的数据库实例,选择你需要的数据库类型(如MySQL、PostgreSQL等),并设置相应的配置(如内存、存储空间、网络类型等)。1.2获取数据库连接信息在创建完成后,你会获得数据库的连接信息,包括