赞
踩
目录
聚合函数作用于一组数据,但是只返回一个值 !多输入,单输出
- SELECT AVG (字段名) FROM 表名;
- SELECT SUM (字段名) FROM 表名;
只对数值型的参数有意义 ,不适用于字符串类型和日期类型
- SELECT MAX (字段名) FROM 表名;
- SELECT MIN (字段名) FROM 表名;
适用于数值类型、字符串类型、日期时间类型
COUNT( * ) 返回表中记录总数,适用于任意数据类型
作用1: 用于查询指定字段出现的次数
- SELECT
- count(*)
- count(1) -- 1,2,3,4...几都可以
- count(列名) -- 该字段为NULL的行不被计算
注意, NULL将不被算在记录里。例如commission_pct只有35条数据非NULL,那么:
哪种查询方式效率更高?如果使用的是MyISAM存储引擎,则三者效率相同;如果使用InnoDB引擎,则效率:COUNT( *) = COUNT(1) > COUNT(字段)
作用2:计算表中共有多少条记录
- SELECT
- count(*)
- count(1) -- 1,2,3,4...几都可以
作用3:AVG = SUM / COUNT ,这个公式永远成立
如果想查询公司的平均commission_pct,显然用 AVG(commission_pct) 是不正确的
应该用 SUM(commission_pct) / COUNT ( IFNULL ( commission_pct,0 ) )
或者 AVG ( IFNULL ( commission_pct,0 ))
- SELECT....
- FROM...
- 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以下版本尽量不要连用
使用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
SQL92语法
- SELECT 字段,单行函数,聚合函数
- FROM 表1,表2
- WHERE 多表连接条件 AND 不包含聚合函数的过滤条件
- GROUP BY 字段1,字段2
- HAVING 包含聚合函数的过滤条件
- ORDER BY 排序条件1,排序条件2(ASC/DESC)
- LIMIT 初始条目,一页几条
SQL99语法
- SELECT 字段,单行函数,聚合函数
- FROM 表1 (LEFT / RIGHT ) JOIN 表2 ON 多表连接条件1
- (LEFT / RIGHT ) JOIN 表3 ON 多表连接条件2
- WHERE 不包含聚合函数的过滤条件
- GROUP BY 字段1,字段2
- HAVING 包含聚合函数的过滤条件
- ORDER BY 排序条件1,排序条件2(ASC/DESC)
- LIMIT 初始条目,一页几条
这也解释了为什么 WHERE 里不能用聚合条件过滤,因为在使用 WHERE之前 ORDER BY 还没有出现
✿聚合函数完结撒花✿基础知识部分OVER~✿
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。