这是Mysql系列第9篇。

环境:mysql5.7.25,cmd命令中进行演示。

本篇内容

  1. 分组查询语法
  2. 聚合函数
  3. 单字段分组
  4. 多字段分组
  5. 分组前筛选数据
  6. 分组后筛选数据
  7. where和having的区别
  8. 分组后排序
  9. where & group by & having & order by & limit 一起协作
  10. mysql分组中的坑
  11. in多列查询的使用

分组查询

语法:

SELECT column, group_function,... FROM table [WHERE condition] GROUP BY group_by_expression [HAVING group_condition];

说明:

group_function:聚合函数。

group_by_expression:分组表达式,多个之间用逗号隔开。

group_condition:分组之后对数据进行过滤。

分组中,select后面只能有两种类型的列:

  1. 出现在group by后的列
  2. 或者使用聚合函数的列

聚合函数

函数名称 作用
max 查询指定列的最大值
min 查询指定列的最小值
count 统计查询结果的行数
sum 求和,返回指定列的总和
avg 求平均值,返回指定列数据的平均值

分组时,可以使用使用上面的聚合函数。

准备数据

drop table if exists t_order;  -- 创建订单表 create table t_order(   id int not null AUTO_INCREMENT COMMENT '订单id',   user_id bigint not null comment '下单人id',   user_name varchar(16) not null default '' comment '用户名',   price decimal(10,2) not null default 0 comment '订单金额',   the_year SMALLINT not null comment '订单创建年份',   PRIMARY KEY (id) ) comment '订单表';  -- 插入数据 insert into t_order(user_id,user_name,price,the_year) values   (1001,'路人甲Java',11.11,'2017'),   (1001,'路人甲Java',22.22,'2018'),   (1001,'路人甲Java',88.88,'2018'),   (1002,'刘德华',33.33,'2018'),   (1002,'刘德华',12.22,'2018'),   (1002,'刘德华',16.66,'2018'),   (1002,'刘德华',44.44,'2019'),   (1003,'张学友',55.55,'2018'),   (1003,'张学友',66.66,'2019')