mysql笔记四之排序、聚合、分组

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/kan2016 https://blog.csdn.net/kan2016/article/details/82771648

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

猜你喜欢

转载自blog.csdn.net/kan2016/article/details/82771648