news 2026/4/26 3:24:17

MySQL 进阶:分组查询全解析与实用逻辑函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 进阶:分组查询全解析与实用逻辑函数

MySQL 进阶:分组查询全解析与实用逻辑函数

在日常数据处理中,光会单表增删改查还不够,分组统计和条件判断才是数据洞察的利器。本文聚焦分组查询的完整语法与执行顺序,并介绍IF、CASE WHEN、IFNULL 等逻辑函数,以及RAND() 随机数和 DATE_FORMAT 日期格式化等实用技巧。


一、分组查询的完整语法

聚合函数(COUNT、SUM、AVG、MAX、MIN)强大之处在于与分组结合。完整的分组查询结构如下:

SELECT分组字段,聚合函数FROM表名WHERE条件GROUPBY分组字段HAVING分组后的筛选条件ORDERBY排序字段ASC|DESCLIMIT起始索引,条数;

各子句作用:

  • WHERE:分组前对原始行数据进行过滤
  • GROUP BY:按指定字段分组,每个分组返回一行
  • HAVING:对分组后的结果进行筛选(与 WHERE 的区别就在这里)
  • ORDER BY:排序,ASC(升序,默认)或 DESC(降序)
  • LIMIT:限制返回条数。起始索引从 0 开始,LIMIT 5等同于LIMIT 0,5

示例:查找每个部门中在职员工的平均薪资,只显示平均薪资大于 8000 的部门,按平均薪资降序取前 3 名

SELECTdepartment_id,AVG(salary)ASavg_salaryFROMemployeesWHEREstatus='在职'GROUPBYdepartment_idHAVINGavg_salary>8000ORDERBYavg_salaryDESCLIMIT3;

书写顺序 ≠ 执行顺序,真实执行流程如下:

  1. FROM—— 锁定数据表
  2. WHERE—— 筛选原始数据行
  3. GROUP BY—— 分组
  4. HAVING—— 筛选分组后的数据
  5. SELECT—— 选取最终显示的字段及别名
  6. ORDER BY—— 对最终结果排序
  7. LIMIT—— 截取指定行数

记忆口诀:FROM 找表 → WHERE 筛数 → GROUP BY 分类 → HAVING 筛类 → SELECT 选字段 → ORDER BY 排序 → LIMIT 截断。

注意:别名在 SELECT 阶段才生效,因此 WHERE 中不能使用别名,但 HAVING 和 ORDER BY 中可以。


二、逻辑函数:IF、CASE WHEN、IFNULL

1. IF 函数

IF(条件表达式,1,2)

条件为真返回值1,否则返回值2。适合简单二分判断。

SELECTname,score,IF(score>=60,'及格','不及格')ASresultFROMstudents;

2. CASE WHEN 结构

支持多分支判断,语法更像编程语言中的 switch 或 if-else:

CASEWHEN条件1THEN结果1WHEN条件2THEN结果2...ELSE默认结果END

示例:按分数划分等级

SELECTname,score,CASEWHENscore>=90THEN'优秀'WHENscore>=75THEN'良好'WHENscore>=60THEN'及格'ELSE'不及格'ENDASgradeFROMstudents;

3. IFNULL 函数

IFNULL(表达式1,表达式2)

如果表达式1为 NULL,则返回表达式2,常用于空值处理。

SELECTusername,IFNULL(phone,'未填写')AScontactFROMusers;

三、伪随机数函数 RAND()

RAND()返回一个 [0,1) 之间的浮点数。可用于随机抽样、生成测试数据等场景。通过指定相同的种子值,可以复现随机序列。

SELECTRAND();-- 每次执行结果不同SELECTRAND(6);-- 同一版本中,结果固定

随机抽取表中 5 条数据:

SELECT*FROMproductsORDERBYRAND()LIMIT5;

四、日期格式化 DATE_FORMAT()

当需要将日期转换为特定字符串格式时,DATE_FORMAT()非常实用。

DATE_FORMAT(日期时间,'格式串')

常用格式符:

格式符含义
%Y四位年
%m月份(01-12)
%d日(01-31)
%H小时(00-23)
%i分钟
%s

示例:

SELECTDATE_FORMAT(NOW(),'%Y年%m月%d日 %H:%i:%s')AS当前时间;-- 输出:2025年04月25日 15:30:45

五、补充:大小写转换

两个简单但常用的字符处理函数:

SELECTUPPER('hello');-- 转为大写 -> 'HELLO'SELECTLOWER('WORLD');-- 转为小写 -> 'world'

小结

本文聚焦 MySQL 中几个进阶但高频使用的知识点:

  • 分组查询的完整语法及HAVING的用法,理解真实执行顺序
  • 逻辑函数IFCASE WHENIFNULL完成多条件判断和空值处理
  • RAND()生成随机数
  • DATE_FORMAT()灵活格式化日期输出
  • UPPER()LOWER()快速进行大小写转换

掌握这些技巧能让你的 SQL 查询更加灵活高效,是数据分析与后端开发中不可或缺的基础工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 3:20:32

深度学习篇---FFN

一、什么是 FFN?FFN(Feed-Forward Network,前馈网络) 是 Transformer 架构中的核心组成部分之一,位于多头注意力(Multi-Head Attention)层之后。它的作用可以这样理解:注意力层负责“…

作者头像 李华
网站建设 2026/4/26 3:11:03

神经网络联合建模:分类与回归任务的高效解决方案

1. 神经网络在分类与回归联合任务中的应用价值在真实业务场景中,我们常常遇到需要同时预测离散类别和连续数值的问题。比如电商平台既要判断用户是否会点击商品(分类),又要预估点击后的停留时长(回归)&…

作者头像 李华
网站建设 2026/4/26 3:11:00

2026年全国青少年信息素养大赛算法应用主题赛C++赛项初赛+复赛备赛资料(2026最新模拟题+历年初赛复赛真题)

2026年全国青少年信息素养大赛算法应用主题赛C赛项初赛复赛备赛资料(2026最新模拟题历年初赛复赛真题) 2026年全国青少年信息素养大赛算法应用主题赛C样题及答案解析 https://noicsp.blog.csdn.net/article/details/159561154?spm1011.2415.3001.5331 …

作者头像 李华
网站建设 2026/4/26 3:10:42

自学软件测试day14——LINUX

Linux操作系统基础与应用摘要 本文系统介绍了Linux操作系统的基础知识与应用方法。首先阐述了Linux作为开源操作系统的特点,包括稳定性、多用户支持、安全性等核心优势。重点介绍了常用命令操作,包括目录管理、文件操作、文本查看等实用技巧。此外&#…

作者头像 李华