夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Node基础

  • 《MySQL》学习笔记

    • Navicat for MySQL
    • SQL语法
    • 查询操作
    • 数据统计
      • 案例数据
      • 算术运算
      • 聚合函数
        • 示例
        • 特别注意
      • 分组子句:group by
        • group by 子句
        • group_concat() 函数
      • 指定条件:having
      • 子句顺序
    • 高级查询
    • 内置函数
    • 数据修改
    • 表的操作
    • 列的属性
    • 多表查询
    • 视图
    • 索引
    • 存储程序
    • 游标
    • 事务
    • 安全管理
    • 数据备份
    • 其他内容
  • Midway

  • Nest

  • 其他

  • 服务端
  • 《MySQL》学习笔记
夜猫子
2023-10-31
目录

数据统计

# 数据统计

# 案例数据

{%}

# 算术运算

对于 select 语句来说,我们可以在 select 子句中使用算术运算。MySQL 的常用算术运算符有 7 个,如表所示。

运算符 说明 用法
+ 加 a + b
- 减 a – b
* 乘 a * b
/ 除 a / b
% 取余 a % b
div 取整,即取商的整数部分 a div b
- 取负数 -a

示例:

select name, price + 10
from fruit;
1
2

{%}

# 聚合函数

聚合函数,也叫作“统计函数”。所谓的聚合函数,指的是对一列值进行计算,然后最终会返回单个值。所以聚合函数还可以叫作“组函数”。

在实际开发中,有时需要对某一列的数据进行求和、求平均值等操作,此时就要用到聚合函数。MySQL 的常用聚合函数有 5 个,如下表所示。

函数 说明
sum() 求和
avg() 求平均值
max() 求最大值
min() 求最小值
count() 获取行数

count(*):计算表的行数,不会忽略值为 null 的行,count(*) 表示包含所有的列。

# 示例

sum() 求和:

select sum(类型 列名)
from 表名;
1
2

“类型”的取值有两种:all 和 distinct,默认值是 all。如果是 all,则计算所有值的和;如果是 distinct,则计算非重复值的和。

sum() 函数只能用于对数值列的数据求和,并且计算时会忽略 null 值。

select sum(price)
from fruit;
1
2

{%}

# 特别注意

对于聚合函数来说,需要特别注意以下两点。

  • 聚合函数一般用于 select 子句,而不能用于 where 子句,准确的说法是:聚合函数只能用于 select、order by、having 这 3 种子句,而不能用于 where、group by 等其他子句。
  • sum()、avg()、max()、min() 这 4 个聚合函数只适用于数值类型的列。如果指定列的数据不是数值类型,就可能会报错。

已下是个错误示例:

select *
from fruit
where price > avg(price);
1
2
3

# 分组子句:group by

分组统计,指的是根据“某些条件”来将数据拆分为若干组。例如有一个学生信息表,我们可以根据类型、性别、家乡等对学生进行分组,然后统计每个组有多少人、男女各为多少人等。

# group by 子句

select 列名
from 表名
group by 列名;
1
2
3

当你使用GROUP BY子句时,SELECT列表中除了聚合函数(如COUNT(*))之外的所有字段都必须包含在GROUP BY子句中

示例

select type as 类型,
       season as 季节,
       count(*) as 行数
from fruit
group by type, season;
1
2
3
4
5

{%}

group by 子句的书写顺序是有严格要求的:group by 子句一定要写在 where 子句以及 from 子句的后面。如果没有按照下面的顺序书写,那么在执行 SQL 代码时会报错。

select 子句 → from 子句 → where 子句 → group by 子句
1

在实际开发中,group by 子句经常是和聚合函数,一起使用的。**我们一说起 group by 子句,就应该把它和聚合函数联系起来。**这是 group by 子句非常重要的一个特点,小伙伴们一定要记住。

select type as 类型,
       max(price) as 最高售价,
       min(price) as 最低售价,
       avg(price) as 平均售价
from fruit
group by type;
1
2
3
4
5
6

{%}

# group_concat() 函数

在 MySQL 中,可以使用 group_concat() 函数来查看不同分组的取值情况。

select type as 类型,
       group_concat(name) as 取值
from fruit
group by type;
1
2
3
4

{%}

# 指定条件:having

在 MySQL 中,可以使用 having 子句来给分组指定条件,也就是给 group by 子句的结果指定条件。

having 子句不能单独使用,而必须结合 group by 子句使用,并且 having 子句必须位于 group by 子句之后。实际上,select 语句的各个子句必须遵循下面的书写顺序。

select 子句 → from 子句 → where 子句 → group by 子句 → having 子句
1

示例,行数为 3 的分组

select type as 类型,
       count(*) as 行数
from fruit
group by type
having count(*) = 3;
1
2
3
4
5

{%}

# 子句顺序

select 语句主要包含 7 种子句, 每条语句都是由不同的子句组合而成的,如下表所示:

子句 说明
select 查询哪些列
from 从哪个表查询
where 查询条件
group by 分组
having 分组条件
order by 排序
limit 限制行数

前面我们了解到,各个子句的书写是需要遵循一定顺序的。select 语句中的各个子句需要严格遵循下面的书写顺序。

select → from → where → group by → having → order by → limit
1
编辑 (opens new window)
上次更新: 2025/3/12 17:54:26
查询操作
高级查询

← 查询操作 高级查询→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式