MySQL:23---MySQL分组查询(group by)

分组查询

  • 对数据按照某个或多个字段进行分组(使用group by分组),然后查看
  • group by通常与集合集合函数放在一起使用

一、group by基本使用

将s_id分组,然后算每一种s_id的数量

  • select  s_id,count(*)  AS  Total  from  fruits  group  by  s_id;

二、group_concat函数

  • group_concat函数可以将括号内的指定字段显示出来

将s_id分组,然后显示每种s_id中的f_name

  • select  s_id,group_concat(f_name)  AS Names  from  fruits  group by s_id;

三、使用having过滤分组

  • having后面接条件,只显示满足后面条件的数据
  • having与where的不同:where是分组之前筛选,having是分组之后再筛选

先通过s_id将数据分组,然后显示s_id中对应的f_name种类大于1的数据

  • select  s_id,group_concat(f_name)  AS Names from fruits group  by s_id  having  count(f_name) >1;

四、在group by中使用with roolup

  • with rollup:可用于算出查询字段的总数,然后再所有的数据最后一行添加新的一行,用于列出指定字段的总数值

先按照s_id分组查询,然后算出s_id的总数

  • select  s_id,count(*) AS  Total  from  fruits  group by  s_id with rollup;

五、多字段分组

  • group by后面跟多个分组字段。分组层次从左到右,即先按第1个字段分组,然后再根据第2个字段进行分组
  • 先按s_id分组,然后再按f_name分组

六、group by和order by一起使用

  • 先根据group by将字段分组,然后再根据order by后面的字段排序

create table orderitems(

o_num int not null,

o_item int not null,

f_id char(10) not null,

quantity int not null,  //数量

item_price decimal(8,2) not null,   //单价

primary key(o_num,o_item)

);

  • 先根据o_num分组,然后通过having筛选出订单总价大于100的o_num,然后通过订单总价进行排序

select  o_num,sum(quantity*item_price) As Total from orderitems group by o_num having sum(quantity*item_price)>100 order by Total;

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/88314211