Mysql基础归纳--第五卷

1.聚合函数

聚合函数类型
AVG()
SUM()
MAX()
MIN()
COUNT()

1.1 AVG()和SUM()

只能对数值型数据使用

1.2MINMAX函数

可以对 任意数据类型 的数据使用 MIN MAX 函数。
SELECT MIN(hire_date), MAX(hire_date) FROM employees;

 1.3COUNT(*)和count(列名)

返回里面列明不为空的。

count(*) 会统计值为 NULL 的行,而 count( 列名 ) 不会统计此列为 NULL 值的行。

2.1基本使用

可以使用 GROUP BY子句将表中的数据分成若干组;
SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中;

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

2.2使用多个列分组

SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ;

 其中

WITH ROLLUP:
使用这个关键字 在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所
有记录的总和,即统计记录数量。
例如:

 3.having

用来过滤group by分组的条件子句,使用了聚合函数

SELECT department_id, MAX(salary) FROM employees 
GROUP BY department_id HAVING MAX(salary)>10000 ;

 3.1切记不能再where中用

SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;

3.2 where和having的对比

区别 1 WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;
HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。
这决定了,在需要对数据进行分组统计的时候, HAVING 可以完成 WHERE 不能完成的任务。这是因为,
在查询语法结构中, WHERE GROUP BY 之前,所以无法对分组结果进行筛选。 HAVING GROUP BY
后,可以使用分组字段和分组中的计算函数,对分组的结果集进行筛选,这个功能是 WHERE 无法完成
的。另外, WHERE 排除的记录不再包括在分组中。
区别 2 :如果需要通过连接从关联表中获取需要的数据, WHERE 是先筛选后连接,而 HAVING 是先连接
后筛选。 这一点,就决定了在关联查询中, WHERE HAVING 更高效。因为 WHERE 可以先筛选,用一
个筛选后的较小数据集和关联表进行连接,这样占用的资源比较少,执行效率也比较高。 HAVING 则需要
先把结果集准备好,也就是用未被筛选的数据集进行关联,然后对这个大的数据集进行筛选,这样占用
的资源就比较多,执行效率也较低
WHERE
先筛选数据再关联,执行效率高
不能使用分组中的计算函数进行筛选
HAVING
可以使用分组中的计算函数
在最后的结果集中进行筛选,执行效率较低

4.select的执行过程

4.1关键字的顺序

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...  

4.2select语句的执行顺序

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT  

比如,你写了一个sql语句,那么你的关键顺序和执行顺序是下面这样的:

SELECT DISTINCT player_id, player_name, count (*) as num # 顺序 5
FROM player JOIN team ON player .team_id = team .team_id # 顺序 1
WHERE height > 1.80 # 顺序 2
GROUP BY player .team_id # 顺序 3
HAVING num > 2 # 顺序 4
ORDER BY num DESC # 顺序 6
LIMIT 2 # 顺序 7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值