oracle 中group by和 order by的区别


group by 从英文里理解就是分组。必须有“聚合函数”(分组函数)来配合才能使用,使用时至少需要一个分组标志字段。

什么是“聚合函数”?
像sum()、count()、avg()等都是“聚合函数”
使用group by 的目的就是要将数据分类汇总

1.出现在select 列表中的字段,如果出现的位置不是在组函数中,那么必须出现在group by子句中。

eg. select department_id, AVG(salary)

from employees

group by department_id;

 

eg. select ename, AVG(salary)

from employees

group by department_id;这样就是错误的啦。

我自己的测试如下:


2.在group by 子句中出现的字段,可以不出现在查询列表中。

eg. select AVG(salary)

from employees

group by department_id;

这是没问题的。

3.在group by 子句中,可以按单列进行分组,也可以在多列上进行分组,多列分组就是按照多个字段的组合进行分组,最终结果也会按照分组字段进行排序显示。

eg. select department_id dept_id , job_id , sum(salary)

from employees

group by department_id , job_id

order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。

在sql命令格式使用的先后顺序上,groupby 先于 order by。

order by是按指定的列的升序或降序来给查询结果排序,
它不需要查询结果中出现order by的栏位.
更改Order by里的栏位只会影响查询结果的顺序,而不影响查询出的记录总数,和每条记录的内容.

where 子句中不允许出现组函数,组函数可以出现在查询列表中,也可以出现在groupby 字句中。但是不允许出现在where 子句中。因此对组的过了不能通过where实现,而是需要having子句实现。

实际运行测试:

上面可以看出,group by 只有三个部门的记录,而order by显然会有显示出所有的记录,因为它只是对原先的记录进行一个排序而已。

你可能感兴趣的:(oracle 中group by和 order by的区别)