MySQL—分组函数

一、概念

概念 :分组函数作用于一组数据,并对一组数据返回一个值;
类型

函数 适用数据类型 作用 举例
AVG() 数值型 平均值 SELECT AVG(salary) FROM employees WHERE job_id LIKE '%REP%';
COUNT() 任意数据 计数 count(*) 返回表中记录总数 :SELECT COUNT(*) FROM employees WHERE department_id = 50,count(expr)返回expr不为空的记录总数:SELECT COUNT(department_id ) FROM employees WHERE department_id = 50
MAX() 任意数据 最大值 SELECT MAX(salary) FROM employees WHERE job_id LIKE '%REP%';
MIN() 任意数据 最小值 SELECT MIN(salary) FROM employees WHERE job_id LIKE '%REP%';
SUM() 数值型 合计 SELECT SUM(salary) FROM employees WHERE job_id LIKE '%REP%';

语法

注意

不能在where子句中使用组函数,可以在having子句中使用组函数

二、GROUP BY子句语法

概念 :可以使用GROUP BY子句将表中的数据分成若干组
规则

  1. (保命规则)在select列表中所有未包含在组函数中的列都应该包含在GROUP BY子句中;
  2. (自由规则)包含在GROUP BY子句中的列不必包含在select列表中;
sql 复制代码
规则一:只要你在 SELECT 里写了 既不是聚合函数(SUM/AVG/COUNT...)也不是常量的列,那么该列必须原封不动地写进 GROUP BY,否则直接报 SQL 错误(MySQL 8 之前如果开了 ONLY_FULL_GROUP_BY 会报错,关了会返回不可预期的行)。
正确举例:
SELECT dept_id, emp_name, COUNT(*)  
      FROM emp  
      GROUP BY dept_id,emp_name;
错误举例:
SELECT dept_id, emp_name, COUNT(*)  
      FROM emp  
      GROUP BY dept_id;        -- 错!emp_name 没出现在 GROUP BY
 
规则二:反过来,GROUP BY 里可以列出任意多列,但你不一定把它们都 SELECT 出来;它们只是用来"分组的钥匙"。
举例:
SELECT COUNT(*)  
      FROM emp  
      GROUP BY dept_id, job;   -- 只按两列分组,但 SELECT 里一个列都没出现,完全合法

三、HAVING子句

概念

使用HAVING过滤分组:

  1. 行已经被分组;
  2. 使用了组函数;
  3. 满足HAVING子句中条件的分组将被显示;
    . 语法

    举例

四、多表查询

4.1 MySQL连接

使用连接在多个表中查询数据;

  1. 在where子句中写入连接条件;
  2. 在表中有相同列时,在列名之前加上表名前缀;

4.2 等值连接

4.3 使用ON子句创建连接

  • 自然连接中是以具有相同名字的列为连接条件的;
  • 可以使用ON子句指定额外的连接条件;
  • 这个连接条件是与其他条件分开的;
  • ON子句使语句具有更高的易读性;

4.4 Join连接

分类:

  • 内连接inner join on
  • 外连接(左外连接 left outer join on、右外连接 right outer join on)


相关推荐
TDengine (老段)1 分钟前
TDengine 免费版说明
java·大数据·数据库·物联网·时序数据库·tdengine
汉知宝科技2 分钟前
历史案件数据迁移:知识产权管理系统落地的第一道门槛
大数据·数据库
这就是佬们吗12 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
吴声子夜歌13 分钟前
MongoDB 4.x——SpringBoot框架整合
数据库·spring boot·mongodb
Database_Cool_44 分钟前
阿里云 Tair(企业级内存数据库)vs 腾讯云 Redis 云缓存深度对比:性能/数据结构/成本全维度 Benchmark
数据库·阿里云·缓存
garuda herb1 小时前
生成专题页Blog--建立并返回 MySQL 数据库连接
python·mysql
流星白龙1 小时前
【Redis】1.Redis特性
数据库·redis·缓存
奶糖 肥晨1 小时前
DBeaver 安装与 MySQL 连接配置教程
数据库·mysql
woshihuanglaoshi1 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
万亿少女的梦1681 小时前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐