Mysql--Order by排序、聚合函数(max/min/avg/sum)、分组(group by/ group_concat() )

排序语法:

select * from 表名 order by 1 asc | desc [,列 2 asc | desc ,...]
说明
  • 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
  • 默认按照列值从小到大排列(asc)
  • asc从小到大排列,即升序,默认排序
  • desc从大到小排序,即降序
例1:查询未删除男生信息,按学号降序
select * from students where gender= 1 and is_delete= 0 order by id desc ;

例2:查询未删除学生信息,按名称升序
select * from students where is_delete= 0 order by name ;



聚合函数

为了快速得到统计数据,经常会用到如下5个聚合函数
  • count(*)表示计算总行数,括号中写星与列名,结果是相同的
  • 聚合函数不能在 where 中使用
例1:查询学生总数
select count (*) from students;

最大值

  • max(列)表示求此列的最大值
例2:查询女生的最大年龄
select max ( age ) from students where gender= 2 ;

最小值

  • min(列)表示求此列的最小值
例3:查询未删除的学生最小编号
select min ( id ) from students where is_delete= 0 ;

求和

  • sum(列)表示求此列的和
例4:查询男生的总年龄
select sum (age) from students where gender= 1 ;

-- 平均年龄
select sum (age)/ count (*) from students where gender= 1 ;

平均值

  • avg(列)表示求此列的平均值
例5:查询未删除女生的年龄的平均值
select avg ( age ) from students where is_delete= 0 and gender= 2 ;
分组

group by

  1. group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组
  2. group by可用于单个字段分组,也可用于多个字段分组

例如:
select gender from students group by gender;


select gender from students group by gender;



group by + group_concat()

  1. group_concat(字段名)可以作为一个输出字段来使用,
  2. 表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合

查询每种gender,都有哪些name




group by + group_concat()

查询每种gender所有人的avg(age),以及每种gender的,个数count(*),  同理还有sum()   max()   min()   




group by + having

  1. having 条件表达式:用来分组查询后指定一些条件来输出查询结果
  2. having作用和where一样,但having只能用于group by

select gender,count(*) from students group by gender having count(*)>2;



group by + with rollup

  1. with rollup的作用是:在最后新增一行,来记录当前列里所有记录的总和,  或者罗列各个数字(去重)

select gender,count(*) from students group by gender with rollup;

猜你喜欢

转载自blog.csdn.net/chenmozhe22/article/details/80602075