Oracle分组聚合

博客介绍了使用SQL进行部门平均工资统计的方法。先展示了基本的统计语句,接着引入分组聚合功能,通过示例说明按列分组计算平均工资,强调分组查询列的限制,还提及可使用多列分组统计各部门员工工资与平均工资相同情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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条记录,分别对应各个部门员工工资和平均工资有多少一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值