zoukankan      html  css  js  c++  java
  • mysql之聚合函数、group by、having

    sql中提供聚合函数可以用来统计,求和,求最值等

    那么聚合函数有哪些呢?

    COUNT    统计行数量

    SUM         求某一列的和

    AVG          求某一列的平均值

    MAX    求某一列的最大值

    MIN     求某一列的最小值

    下面给出一些具体的用法

    首先创建数据表如下:

    执行列、行计数(count):

    COUNT  标准格式:

    SELECT COUNT(<计数规范>)  FROM 表名;

    其中,计数规范包括

    -* : 计算所有选择的的行,包括NULL的值

    - ALL列名 : 计数所有指定列的非空值,如果不写,就默认为ALL

    - DISTINCT 列名 : 计数指定的列的唯一非空值

     例如,计算班里有多少学生:

    这样就出错了,会把null值也算进来,可以这样来计算:

    也可以加入条件筛选,例如计算女生的人数

    也可以计算班级数目,需要用到DISTINCT:

    DISTINCT 即去重,如果不加DISTINCT返回的结果会是4

     返回列合计值(SUM):

    注:SUM 只有 ALL 和 DISTINST 俩种计数规范, 并没有*

    计算学生的年龄之和:

    返回列的平均值(AVG):

    计算学生年龄的平均值

    返回最大值/最小值(MAX/MIN):    

    求年龄最大的学生(最小年龄同理)

    注:这里只能求最大值,不能查询学生的具体信息,需要用到子查询

    数据分组  (GROUP BY )

    SQL数据可以按照列名分组,配合聚合函数十分实用

    比如我们想知道每个班里有几个学生,我们可以使用 GTOUP BY 配合  COUNT 使用:

     注意:因为聚合函数通过作用于一组数据而只返回一个单个值,因此,在SELECT语句中出现的元素要么为一个聚合函数的输入值,要么为GROUP BY语句的参数,否则会出错。

    HAVING 过滤条件

    HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。
     
    再说HAVING之前先要讲一下sql的执行顺序:
    第一步: 执行FROM 
    第二步: 执行WHERE过滤条件
    第三步: 执行GROUP BY 分组
    第四步: 执行SELECT投影
    第五步: 执行HAVING过滤条件
    第六步: 执行ORDER BY排序
    例,我们想查询平均年龄在20岁以上的班级
    能用下面的语句吗?
    SELECT student_class, AVG(student_age) FROM t_student WHERE AVG(student_age)>20 GROUP BY student_class;
    结果会出错。正因为聚合函数在WHERE之后执行,所以这里在WHERE判断条件里加入聚合函数是做不到的。
    这里使用HAIVING即可完成:
  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/skl-bobo/p/10597404.html
Copyright © 2011-2022 走看看