关于GROUP BY的注意事项和HAVING 与 WHERE 的区别

先给出语法
SELECT [DISTINCT] 分组字段1 [AS ] [列别名], 统计函数 [AS] [别名] ,… …
FROM 表名称1 [表别名1],表名称2[表别名2],… …
[WHERE 条件(s)]
[GROUP BY 分组字段1,分组字段2,… …]
[HAVING 过滤条件(s)]
[ORDER BY 排序字段 ASD|DESC];

注意事项一
如果没有GROUP BY 子句,则在SELECT 子句中只允许出现统计函数,其它任何字段都不允许出现。
例如:SELECT deptno, COUNT(emptno) FROM emp
注意事项二
在统计查询中,SELECT子句后只允许出现分组字段和统计函数,而其他的非分组字段不能使用。
例如:SELECT deptno,ename,COUNT(emptno) FROM emp GROUP BY deptno
注意事项三
在Oracle当中统计函数允许嵌套使用,但嵌套统计函数之后的SELECT子句不允许在出现任何的字段,包括分组字段。

对于WHERE 和 HAVING 子句,都是用来进行条件过滤的。但是又有区别,区别如下:
WHERE 子句::是在分组之前使用,表示从所有数据中筛选出部分数据,已完成分组的要求,在WHERE子句中不允许 使用统计函数,没有GROUP BY 子句也能使用。

HAVING 子句:是在分组之后使用的,表示对分组统计后的数据执行再次过滤,可以使用统计函数,有GROUP BY 子句之后才可出现HAVING 子句

猜你喜欢

转载自blog.csdn.net/Marko_Liu/article/details/89670389