MySQL基础学习笔记——分组

分组

  • 分组查询就是将查询结果按照指定字段进行分组,字段中数据相等的分为一组。
# 用法格式
select * from 表名 group by 列名 [having 条件表达式] [with rollup];
  • 列名:指按照指定的字段进行分组;
  • having 条件表达式:用来过滤分组后的数据;
  • with rollup:在全部记录最后加上一行记录,显示select查询时聚合函数的统计的计算结果
group by的使用
  • 说明:group up能够用于单个和多个字段分组
# 根据单位分组
select unit from price group by unit;
# 根据单位和消费额分组:先把单位分组,再把每一个单位中的消费额分组
select unit, expenditure from price group by unit, expenditure;
group by + group_concat()使用
  • group_concat(字段名):统计每一个分组指定字段的信息集合,每一个信息之间使用逗号进行分割。
# 根据单位分组,查询单位和分组的名称信息
select unit, group_concat(name) from price group by unit;

# | unit | group_concat(name) |
# | 元/盘 | 蒜苔炒肉,粉条炒肉 |
group by + 聚合函数的使用
// 计算不一样单位对应的记录数
select unit, count(*) from price group by unit;
// 计算不一样单位对应的平均单价
select unit, avg(price) from price group by unit;
group by + having的使用
  • having做用和where相似都是过滤数据的,但having是过滤分组数据的,只能用于group by
# 根据unit进行分组,统计分组条数大于2的
select unit, count(*) from price group by unit having count(*)>2;
group by + with rollup的使用
  • with rollup的做用:在最后的记录后面新增一行,显示select查询时聚合函数的统计和计算结果。
# 根据单位字段进行分组,汇总总记录数
select unit, count(*) from price group by unit with rollup;
# 根据单位字段进行分组,汇总消费总额
select unit, sum(expenditure) from price group by unit with rollup;