查询:排序Order by、聚合函数、分组groupby

排序Order by

order by 字段 asc/desc

       -- asc从小到大排列,即升序

       -- desc从大到小排序,即降序

       -- 查询年龄在18到34岁之间的男性,按照年龄从小到到排序

       select * from students where (age between 18 and 34) and gender=1;

       select * from students where (age between 18 and 34) and gender=1 order by age;

       select * from students where (age between 18 and 34) and gender=1 order by age asc;

       -- 查询年龄在18到34岁之间的女性,身高从高到矮排序

       select * from students where (age between 18 and 34) and gender=2 order by height desc;

      

order by 字段 asc/desc,字段 asc/desc……

       -- 查询年龄在18到34岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序

       select * from students where (age between 18 and 34) and gender=2 order by height desc,age desc;

       -- 查询年龄在18到34岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序,

       -- 如果年龄也相同那么按照id从大到小排序

       select * from students where (age between 18 and 34) and gender=2 order by height desc,age asc,id desc;

      

       -- 按照年龄从小到大、身高从高到矮的排序

       select * from students order by age asc, height desc;

聚合函数

count (查询行数)

       -- 查询男性有多少人,女性有多少人

       select * from students where gender=1;

       select count(*) from students where gender=1;

       select count(*) as 男性人数 from students where gender=1;

       select count(*) as 女性人数 from students where gender=2;

最大值

       -- max

       -- 查询最大的年龄

       select age from students;

       select max(age) from students;

       -- 查询女性的最高 身高

       select max(height) from students where gender=2;

最小值

       -- min

      

求和

       -- sum

       -- 计算所有人的年龄总和

       select sum(age) from students;

平均值

       -- avg

       -- 计算平均年龄

       select avg(age) from students;

       -- 计算平均年龄 sum(age)/count(*)

       select sum(age)/count(*) from students;

round

       -- 四舍五入 round(123.23 , 1) 保留1位小数

       -- 计算所有人的平均年龄,保留2位小数

       select round(sum(age)/count(*), 2) from students;

       select round(sum(age)/count(*), 3) from students;

       -- 计算男性的平均身高 保留2位小数

       select round(avg(height), 2) from students where gender=1;

       -- select name, round(avg(height), 2) from students where gender=1;

分组group by

l  group by

       -- 按照性别分组,查询所有的性别

       select name from students group by gender;

       select * from students group by gender;

       select gender from students group by gender;

       -- 计算每种性别中的人数

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

       -- 计算男性的人数

       select gender,count(*) from students where gender=1 group by gender;

l  group_concat(...)

完整的语法如下:

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

select * from aa;

+------+------+

| id| name |

+------+------+

| 1 | 10|

| 1 | 20|

| 1 | 20|

| 2 | 20|

| 3 | 200 |

| 3 | 500 |

+------+------+

以id分组,把name字段的值打印在一行,逗号分隔(默认)

mysql> select id, group_concat(name) from aa group by id;

以id分组,把name字段的值打印在一行,分号分隔

mysql> select id, group_concat(name separator ';') from aa group by id;

 +------+----------------------------------+

 | id| group_concat(name separator ';') |

 +------+----------------------------------+

 |1 | 10;20;20 |

 |2 | 20|

 |3 | 200;500 |

 +------+----------------------------------+

以id分组,把去冗余的name字段的值打印在一行, 逗号分隔

mysql> select id, group_concat(distinct name) from aa group by id;

 +------+-----------------------------+

 | id| group_concat(distinct name) |

 +------+-----------------------------+

 |1 | 10,20|

 |2 | 20 |

 |3 | 200,500 |

 +------+-----------------------------+

以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序

 mysql> select id, group_concat(name order by name desc) from aa group by id;

>>> 

 +------+---------------------------------------+

 | id| group_concat(name order by name desc) |

 +------+---------------------------------------+

 |1 | 20,20,10 |

 |2 | 20|

 |3 | 500,200|

 +------+---------------------------------------+ 

原文地址:https://www.cnblogs.com/yongfuxue/p/10037740.html