Oracle分组聚合

但我们要统计一个的部门的平均工资的时候,可以使用

SELECT AVG(*) avg

FROM students

WHERE job_id = 50;来进行统计。

 

如果要继续统计部门号为20,30的平均工资,难道必须不断修改WHERE条件来执行SELECT语句吗?

对于分组查询,SQL还提供了“分组聚合”的功能。

例如:

-- 按job_id分组:

SELECT AVG(salary)  avg

FROM employees

GROUP BY job_id;

执行这个查询,AVG()的结果不再是一个,而是10个,这是因为,GROUP BY子句指定了按job_id分组,因此,执行该SELECT语句时,会把job_id相同的列先分组,再分别计算,因此,得到了10行结果。

 

但是这10行结果分别是哪个部门的,不好看出来,所以我们可以把job_id列也放入结果集中:

 

-- 按job_id分组:

SELECT job_id AVG(salary)  avg

FROM employees

GROUP BY job_id;

这下结果集就可以一目了然地看出各个部门的平均工资。我们再试试把employee_id放入结果集:

 

-- 按class_id分组:

SELECT employee_id, job_id AVG(salary)  avg

FROM employees

GROUP BY job_id;

然后我们执行这条查询,这个时候我们会得到一个语法错误,因为在任意一个分组中,只有job_id都相同,employee_id是不同的,SQL引擎不能把多个employee_id的值放入一行记录中。

因此,分组查询的列中,只能放入分组的列。

 

也可以使用多个列进行分组。例如,我们想统计各个部门员工工资和平均工资有多少一样的:

-- 按job_id, salary分组:

SELECT job_id AVG(salary)  avg

FROM employees

GROUP BY job_id,salary;

上面查询结果集一共有10条记录,分别对应各个部门员工工资和平均工资有多少一样的。

猜你喜欢

转载自blog.csdn.net/u012289399/article/details/89961506