美文网首页
MySQL 数据汇总&分组顺序

MySQL 数据汇总&分组顺序

作者: 乘风破浪的姐姐 | 来源:发表于2020-07-01 18:01 被阅读0次

    聚合函数
    聚合函数在查询时可用于检索数据,以便分析和报表生成,提高工作效率。
    常见的聚合函数使用场景
    1.确定表中的行数(或者满足某个条件或者包含某个特定值的行数)
    2.获取表中行组的和。
    3.找出表列的最大值、最小值、平均值。

    聚集函数定义:运行在行组上,计算和返回单个值的函数

    常用的五个聚集函数

    1. AVG() ,求某列的平均值
      获取多个列的平均值,必须使用多个AVG()函数。该函数忽略值为NULL的行。
    2. COUNT(),计数
    3. MAX(),求最大值,忽略列值为NULL的行
    4. MIN(),求最小值
    5. SUM(),用来返回指定列值的和
      注意:
      DISTINCT用于COUNT()函数时,必须指定列名,不能用于COUNT(*) 。
      DISTINCT使用在MAX和MIN中没有实际意义。
      DISTINCT只能使用列名,而不能使用于计算或者表达式

    示例:
    查询每门课程的平均分

    select sc.c_no, avg(sc.sc_degree) from score sc group  by sc.c_no;
    
    image.png
    select count(*) as s from score ;
    select count (sc_degree) as s from score ;
    select Max(sc_degree) as max_degree from score;
    select sum(sc_degree) as sum_degree from score where c_no = 1105;
    

    GROUP BY分组

    SELECT s_sex,COUNT(s_sex)from student GROUP BY s_sex;
    
    image.png

    说明:GROUP BY子句,指示MySQL 按照s_sex排序并分组数据。从输出中可以看出,女生有5人,男生有5人。

    GROUP BY子句用于MySQL分组数据,然后对每个组而不是整个结果集进行聚集。

    GROUP BY一些重要的规定:

    1. 可以包含任意数量的列.这使得能对分组进行嵌套,为数据分组提供更细致的控制。
    2. 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。即在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
      3.Select中出现的字段可以不是聚集函数和GROUP BY子句中的,默认会返回第一条结果,其他sql不支持。
    3. 除聚集计算语句外,select语句中的每个列都必须在GROUP BY子句中给出(5.5可以使用不打印的列进行分组)。
    4. 如果分组具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL,他们将被分为一组。
    5. GROUP BY子句必须出现在where子句之后,Order By 子句之前。

    Having 过滤分组
    Where 与Having的联系:
    Having支持所有Where操作符(包括通配符条件和带多个操作符的子句),Where的所有技术都适用于Having,两者语法相同,只是关键字有差别。
    Where 与Having的差别:
    Where在数据分组前进行过滤,Having在数据分组后进行过滤。Where排除的行不包括在分组中,这可能会改变计算值,从而影响Having子句中基于这些数值过滤掉的分组。所以Where子句优先级高于Having。
    Having出现则必定有GROUP BY出现。

    查询至少有两名学生选择的课程的平均分 ,且课程是以11开头

    select sc.c_no, avg(sc.sc_degree) from score sc group by  sc.c_no HAVING count(sc.s_no)>2 and sc.c_no like '11%';
    
    image.png

    查询至少有一名学生选择的课程的平均分 ,且课程编号中包含5,并根据课程降序排列

    select sc.c_no, avg(sc.sc_degree) from score sc group by  sc.c_no HAVING count(sc.s_no)>1 and sc.c_no like '%5%' ORDER BY sc.c_no desc;
    
    image.png

    总结:
    SELECT 子句顺序
    select –>from –>where –>group by –>having –>order by –> limit


    image.png

    相关文章

      网友评论

          本文标题:MySQL 数据汇总&分组顺序

          本文链接:https://www.haomeiwen.com/subject/igqrxktx.html