做恒生指数看什么网站,做网站网上接单,wordpress 开发者模式,网站首页flash制作Mysql之聚合函数 什么是聚合函数常见的聚合函数GROUP BYWITH ROLLUPHAVINGHAVING与WHERE的对比 总结SQL底层原理 什么是聚合函数 对一组数据进行汇总的函数#xff0c;但是还是返回一个结果 聚合函数也叫聚集#xff0c;分组函数 常见的聚合函数 1.AVG(): 求平均值 2.SUM() :… Mysql之聚合函数 什么是聚合函数常见的聚合函数GROUP BYWITH ROLLUPHAVINGHAVING与WHERE的对比 总结SQL底层原理 什么是聚合函数 对一组数据进行汇总的函数但是还是返回一个结果 聚合函数也叫聚集分组函数 常见的聚合函数 1.AVG(): 求平均值 2.SUM() :求总值 3.MIN(): 最小值 4.MAX(); 最大值 5.COUNT返回表中的个数 SUMCOUNT这些函数会自动过滤掉空值情况 AVG SUM / COUNT 注意如果计算表中有几条记录可以用以下的方式 1.COUNT(1) 2.COUNT(*) 3.COUNT(具体字段) (不一定正确) 说明count(*)会统计值为 NULL 的行而 count(列名)不会统计此列为 NULL 值的行 一般来说三者的效率是COUNT(*) COUNT(1) COUNT(具体字段) 后面Mysql优化部分会细讲 GROUP BY GROUP BY的作用就是按类分组 SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;注意 1.GROUP BY中声明的字段可以出现在SELECT中 2.GROUP BY声明在FROM后面WHERE后面ORDER BY前面LIMIT前面 WITH ROLLUP 使用 WITH ROLLUP此函数是对聚合函数进行求和 而在groupby后面还可以加入WITH CUBE和WITH ROLLUP 等关键字 对数据进行汇总。不过这个CUBE在mysql中并不适用。 注意 with rollup是对 group by 后的第一个字段进行分组求和 ORDER BY不能在rollup中使用两者为互斥关键字.如果使用会抛出以下错误 Error Code:1221. Incorrect usage of CUBE/ROLLUP and ORDER BY。mysql5.7中是不支持的在8.0以后支持。 HAVING 作用用来过滤数据 如果在过滤条件中使用了聚合函数那么就必须要用HAVING来替换WHERE HAVING 必须声明在GROUP BY的后面 结论 1.当过滤条件有聚合函数的时候则必须声明在HAVING中 2.当过滤条件没有聚合函数的时候则可以声明在HAVING或者WHERE中 但是建议大家声明在WHERE中 HAVING与WHERE的对比 HAVING的使用范围比WHERE广泛 但是在没有聚合函数的时候WHERE的效率要高于HAVING 总结
#方式1
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...#方式2
SELECT ...,....,...
FROM ... JOIN ...
ON 多表的连接条件
JOIN ...
ON ...
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...#其中
#1from从哪些表中筛选
#2on关联多表查询时去除笛卡尔积
#3where从表中筛选的条件
#4group by分组依据
#5having在统计结果中再次筛选
#6order by排序
#7limit分页SELECT表的执行顺序 SQL底层原理 例如如果在多表查询的时候 首先先通过 CROSS JOIN 求笛卡尔积相当于得到虚拟表 vtvirtual table1-1通过 ON 进行筛选在虚拟表 vt1-1 的基础上进行筛选得到虚拟表 vt1-2添加外部行。如果我们使用的是左连接、右链接或者全连接就会涉及到外部行也就是在虚拟 表 vt1-2 的基础上增加外部行得到虚拟表 vt1-3。 当然如果我们操作的是两张以上的表还会重复上面的步骤直到所有