1.-- 排序
     -- order by 字段  默认就是升序排序(小的在前 大的在后)
     -- asc从小到大排列,即升序
     
     -- 查询年龄在18到34岁之间的男性,按照年龄从小到大排序
     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;
     -- 降序 desc
     -- desc从大到小排序,即降序
     -- 查询年龄在18到34岁之间的女性,身高从高到矮排序 --> 降序
     select * from students where age between 18 and 34 and gender = 2 order by height desc;    -- order by 多个字段
     -- 查询年龄在18到34岁之间的女性,身高从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序
     select * from students where age between 18 and 34 and gender = 2 order by height desc,age asc;
     -- 查询年龄在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;2.-- 聚合函数  为了统计而生
     -- 总数
     -- count()
     -- 统计班级有多少人
     -- 以行为单位 有一行算一行
     -- count(*)的效率是最高
     select * from students;
     select count(*) from students;
     select count(id) from students;
     -- 查询男性有多少人,女性有多少人  目前办不到
     select count(*) from students where gender = 1;
     select count(*) from students where gender = 2;     -- 最大值
     -- max()
     -- 查询最大的年龄
     select max(age) from students;    -- 查询女性的最高 身高
     select max(height) from students where gender = 2;    -- 查询最高身高对应的名字
     -- 目前也办不到  需要学习子查询
     # 错误的: select name, max(height) from students;    -- 小月月 180
    
     -- 最小值
     -- min()
     select min(age) from students;    
     -- 求和
     -- sum()
     -- 计算所有人的年龄总和
     select sum(height) from students;
     # 错误select sum(height) / count(*) from students;
     select sum(height) / count(height) from students;     -- 平均值
     -- avg()
     -- 计算平均年龄
     select avg(age) from students;    -- 计算平均身高
     select avg(height) from students;    -- 四舍五入
     -- 计算所有人的平均年龄,保留2位小数
     -- sql中内置的函数可以四舍五入  round()
     -- 可以通过 ? 获取帮助 比如查看函数: ? functions  
     select round(avg(age),2) from students;        -- 计算男性的平均身高 保留2位小数
3.-- 分组
     -- group by 字段
     -- 查看班级上有哪些存在性别
     select distinct gender from students;
     select gender from students group by gender;    ---- 查询所有的性别
     select gender from students;
     -- 按照性别分组
     select gender from students group by gender;    -- 计算每种性别中的人数
     select gender, count(*) from students group by gender;
     --  计算每种性别中的最大年龄
     select gender, max(age) from students group by gender;    -- 先根据性别把数据分为二组
     select gender, name from students group by gender;
     -- group_concat(...)
     # 错误的 select gender,name from students group by gender;
     -- concat: 拼接
     -- 查看每个性别下有哪些人
     select gender, group_concat(name) from students group by gender;    -- 查看每个性别下有哪些人和对应的年龄
     select gender, group_concat(name,"-",age) from students group by gender;    -- 查询同种性别中的姓名和身高
     select gender,group_concat(name,"-",height) from students group by gender;    -- 计算男性的人数
     select count(*) from students where gender = 1;
     select gender,count(*) from students group by gender;    select gender,count(*) from students group by gender having gender = 1;
    -- 对于分组之后的数据做进一步的筛选操作
     -- 使用having
     -- 可以使用having 表示对于已经分组的数据做进一步的筛选
     -- 除了男生以外的分组的人数
     select gender,count(*) from students group by gender having gender != 1;
     select gender,count(*) from students group by gender having not gender = 1;     -- having  对于分组之后的数据 做进一步的筛选
     -- 查询每种性别中的平均年龄avg(age)
     select gender, avg(age) from students group by gender;
     -- 查询每种性别中的平均年龄avg(age), 最大年龄,平均身高,最高身高
     select gender, avg(age) ,max(age), avg(height),max(height) from students group by gender;    -- 查询平均年龄超过30岁的性别,以及姓名
     -- 1. 先根据性别分组 2. 对应的性别的平均年龄是否大于30岁 需要查询的是性别和对应的姓名
     select gender,group_concat(name) from students group by gender having avg(age) > 30;    -- having 和 where 的区别
     where 对于源数据的筛选操作
     having 表示对于已经分组的数据做进一步的筛选, 如果有having 就一定有group by , 有group by 不一定就有having