当前位置:   article > 正文

MySQL学习笔记10-----SELECT的聚合函数们_select 聚合函数

select 聚合函数

目录

1.  AVG()求平均,SUM()求总和

2. MAX()最大,MIN()最小

3. COUNT()求个数

4. GROUP BY  通过字段进行分组

5. HAVING,聚合过滤条件中WHERE的分身

6. 92,99语法小结

6.1 语法规则

6.2 语句执行顺序


        聚合函数作用于一组数据,但是只返回一个值 多输入,单输出

1.  AVG()求平均,SUM()求总和

  1. SELECT AVG (字段名) FROM 表名;
  2. SELECT SUM (字段名) FROM 表名;

          只对数值型的参数有意义 ,不适用于字符串类型和日期类型  

2. MAX()最大,MIN()最小

  1. SELECT MAX (字段名) FROM 表名;
  2. SELECT MIN (字段名) FROM 表名;

          适用于数值类型、字符串类型、日期时间类型 

 3. COUNT()求个数

        COUNT( * ) 返回表中记录总数,适用于任意数据类型

        作用1: 用于查询指定字段出现的次数

  1. SELECT
  2. count(*)
  3. count(1) -- 1,2,3,4...几都可以
  4. count(列名) -- 该字段为NULL的行不被计算

        注意NULL将不被算在记录里。例如commission_pct只有35条数据非NULL,那么:

 哪种查询方式效率更高?如果使用的是MyISAM存储引擎,则三者效率相同;如果使用InnoDB引擎,则效率:COUNT( *) = COUNT(1) > COUNT(字段)

         作用2:计算表中共有多少条记录

  1. SELECT
  2. count(*)
  3. count(1) -- 1,2,3,4...几都可以

        作用3AVG = SUM / COUNT ,这个公式永远成立 

         如果想查询公司的平均commission_pct,显然用 AVG(commission_pct) 是不正确的

应该用 SUM(commission_pct) / COUNT IFNULL commission_pct,0 ) )

或者  AVG ( IFNULL ( commission_pct,0 ))

4. GROUP BY  通过字段进行分组

  1. SELECT....
  2. FROM...
  3. GROUP BY 分组字段1,分组字段2

        查询各个部门的平均工资:先按部门分组,在分别求平均:

         按 department_id,employee_id 两个字段分组,往GROUP BY 后面放就行:

         从实际需求上来说,两个字段谁前谁后效果是一样的

1. SELECT中出现的非组函数的字段,必须出现在GROUP BY中 

        SELECT department_id , job_id , AVG( salary)
        FROM employees
        GROUP BY department_id

        这是错误写法,因为只显示一个 department_id,不同的 job_id 无法显示。

        这个错误在Orical中报错,但是MySQL不报错(付费和免费的区别TAT)

2. GROUP BY 在 FROM , WHERE 后面 ,在ORDER BY 和 LIMIT 前面

3. GROUP BY...WITH ROLLUP,自带总体值

         与 ORDER BY连用时,会出现问题,MySQL8.0以下版本尽量不要连用

 5. HAVING,聚合过滤条件中WHERE的分身

        使用HAVING的前提,是我们使用了GROUP BY ,否则没有意义       

       问题1: 查询部门最高工资比10000高的部分,我们首先想到的是WHERE,尝试一下:

         直接报错,不能用。因为过滤条件中出现了聚合函数,就必须使用HAVING来替换WHERE!

并且, HAVING 必须声明在 GROUP BY 的后面!

         问题2: 查询部门id为10,20,30这三个部门中最高工资比10000高的部门信息:

        方式1(执行效率更高)用WHERE,WHERE永远紧跟 FROM~

           方式2:直接在 HAVING 后面接过滤条件

         结论:多条过滤条件可以分开写!当过滤条件中有聚合函数时,必须声明在 HAVING 中;没有聚合条件时,WHERE,HAVING 都可以,但是为了效率要用 WHERE

 

 6. 92,99语法小结

6.1 语法规则

        SQL92语法 

  1. SELECT 字段,单行函数,聚合函数
  2. FROM1,表2
  3. WHERE 多表连接条件 AND 不包含聚合函数的过滤条件
  4. GROUP BY 字段1,字段2
  5. HAVING 包含聚合函数的过滤条件
  6. ORDER BY 排序条件1,排序条件2ASC/DESC
  7. LIMIT 初始条目,一页几条

        SQL99语法

  1. SELECT 字段,单行函数,聚合函数
  2. FROM1 (LEFT / RIGHT ) JOIN2 ON 多表连接条件1
  3. (LEFT / RIGHT ) JOIN3 ON 多表连接条件2
  4. WHERE 不包含聚合函数的过滤条件
  5. GROUP BY 字段1,字段2
  6. HAVING 包含聚合函数的过滤条件
  7. ORDER BY 排序条件1,排序条件2ASC/DESC
  8. LIMIT 初始条目,一页几条

6.2 语句执行顺序

         这也解释了为什么 WHERE 里不能用聚合条件过滤,因为在使用 WHERE之前 ORDER BY 还没有出现


    ✿聚合函数完结撒花✿基础知识部分OVER~✿   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/805185
推荐阅读
相关标签
  

闽ICP备14008679号