当要根据某些条件对数据分组时,就要使用到GROUP BY语句。GROUP BY语句可结合聚合函数使用,分组条件可是一个也可以是多个。
语法
注意:
使用了GROUP BY语句后,查询的只能是出现在GROUP BY子句中的列或使用了聚合函数的列。
我们还是使用EMP表来做些练习
1.查询有个工种
2.查询每个工种每月所需支付的基本工资
3.查询每个部门平均工资
4.查询每个部门中各个工种的最低工资
5.查询每个工种的最高基本工资,并按基本工资从大到小排序
6.查询除了20部门以外其它部分的平均工资
HAVING子句
如要对分组后的结果过滤,就不能使用WHERE子句了,应该要使用HAVING增加过滤条件。
例有这样一个需求“查询平均工资大于3000的工种信息”,很多学员可能写成这样
以上的SQL语句是错误的,原因是聚合函数(AVG()函数)不能出现WHERE子句中。
我们应调整成以下语句
WHERE与HAVING的区别在于WHERE是先对数据过滤,而HAVING是基于以分组后的数据再过滤,在某些场合可互换。
我们一起看个题:
查询除了CLERK,MANAGER工种以外的工种最高基本工资。
WHERE写法
HAVING写法
以上两种写法都能达到预期目标,但查询过程完全不相同,小伙伴自己实际操作操作吧。