暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

MySQL 基础知识笔记 第04期:分组查询和聚集函数

悦专栏 2021-01-08
568

这一节内容,来通过一张测试表,进行 MySQL 分组查询和聚集函数的练习。

1 数据准备

建表及数据准备,以便后面 SQL 练习:
    use yzl; /* 使用yzl这个database */


    drop table if exists student_info; /* 如果表student_info存在则删除表student_info */


    CREATE TABLE `student_info` ( /* 创建表student_info */
    `id` int(11) NOT NULL auto_increment,
    `stu_id` int(11) DEFAULT NULL COMMENT '学生ID',
    `stu_name` varchar(30) DEFAULT NULL COMMENT '学生姓名',
    `stu_class` varchar(30) DEFAULT NULL COMMENT '学生班级',
    `stu_score` int(11) DEFAULT NULL COMMENT '学生分数',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
    CURRENT_TIMESTAMP
    COMMENT '记录更新时间',
    PRIMARY KEY (`id`),
    KEY `idx_stu_id` (`stu_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


    insert into student_info(stu_id,stu_name,stu_class,stu_score) values(1,'zhang','1班',80),(2,'wang','1班',90),(3,'zhao','2班',80),(4,'liu','2班',86),(5,'duan','2班',88);
    复制

    2 查询全表数据

    查询全表数据,方便后面实验时进行对比。
      select * from student_info;
      复制




      3  显示总人数

        select count(*) from student_info;
        复制


        count(*) 表示记录总数。

        4 显示每个班级的人数

          select stu_class,count(*) from student_info group by stu_class;
          复制

          group by 表示分组
          该语句表示对 stu_class 字段分组,然后显示 stu_class 和每一组 stu_class  的数据量。

          5 按班级分开显示学生名字

            select stu_class,group_concat(stu_name) from student_info group by stu_class;
            复制


            6 显示每个班的最高分

              select stu_class,max(stu_score) as maxscore from student_info group by stu_class;
              复制

              max 表示求最大值。
              SQL 表示按 stu_class 分组后,显示 stu_class 和每一组的 stu_score 最大值。

              7 显示每个班的平均分数

                select stu_class,avg(stu_score) as avgscore from student_info group by stu_class;
                复制

                avg 表示求平均数。
                SQL 表示对 stu_class 分组后,显示 stu_class 和对应的 stu_score 平均值。

                8 显示每个班的总分

                  select stu_class,sum(stu_score) as avgscore from student_info group by stu_class;
                  复制


                  sum 表示求和
                  SQL 表示对 stu_class 分组后,显示 stu_class 和对应的 stu_score 总和。

                  9 显示平均分大于或等于 85 的班级

                    select stu_class,avg(stu_score) as avgscore from student_info group by stu_class having avgscore>=85;
                    复制

                    having 作用是筛选分组之后的数据,where 表示筛选分组之前的数据。
                    SQL 表示对 stu_class 分组后,显示出所有 stu_class 组中 stu_score 平均数大于或等于 85 的 stu_class 值和 stu_score 平均数。




                    如果阅读本篇文章有遇到任何疑问
                    欢迎加入 “MySQL 基础学习” 交流社群
                    群内会有作者和其他 MySQL 大牛一起解答
                    群内也会分享工作经验、面试技巧、其他 MySQL 干货等
                    入群请添加群秘微信,备注“MySQL基础”

                    另外,“悦专栏”将为各位提供模拟面试服务,从简历筛选到面试,都有大神为您做专业的全方位分析!初期阶段,提供 50 个“模拟面试”免费名额,名额有限,欲报从速
                    报名方式:扫描下方二维码关注公众号“悦专栏”,回复“模拟面试”。

                    LIKECOLUMN

                    悦专栏



                    悦专栏 ,从小白到大神的起点


                    文章转载自悦专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论

                    编程经验共享
                    暂无图片
                    1年前
                    评论
                    暂无图片 0
                    确实挺基础的
                    1年前
                    暂无图片 点赞
                    评论