sql计算平均值与group by?
Posted
技术标签:
【中文标题】sql计算平均值与group by?【英文标题】:sql computing average with a group by? 【发布时间】:2015-02-14 17:17:40 【问题描述】:我正在学习 sql(似乎一直在学习!)并且我已经为以下作业设计了一个可行的解决方案。我只是想知道是否可以通过更简单的 sql 查询来获得相同的解决方案,也许在我创建的视图上使用 group by 子句。我无法在 select 子句中将 group by 与 avg() 结合起来。想法?
问题:找出经理的姓名和他们管理的员工的平均工资。
表: WORKS - 包含三列:员工(其中一些也是经理)、公司、薪水。 MANAGES - 包含两列:员工和该员工的经理。
我的临时视图 - 我在查询 (managers_and_salaries) 中创建的临时视图包含两列:经理姓名和经理管理的每个员工的工资。因此,经理名称在此视图中不是唯一的。部分内容如下;显然,这是b.s.数据:
这是我的临时视图(部分)。 不需要视图,这只是我保持头脑清醒的方式: +-----------------+--------+ | MANAGER_NAME |工资 | +-----------------+--------+ |拉克希米米塔尔 | 400000 | |威廉盖茨三世| 300000 | |马克扎克伯格 | 450000 | |马克扎克伯格 | 120000 |等等等等(11行)我的完整sql查询(肯定没必要这么复杂吧?)...
与 manager_and_salaries 作为(选择 m.manager_name,w.salary from manages m inner join works w on m.employee_name = w.employee_name) 选择 manager_name, avg(salary) 来自managers_and_salaries 其中 manager_name 在(选择不同的 manager_name 来自managers_and_salaries) 按 manager_name 分组;我的部分结果...再次,它有效,我只是不禁想到我的 sql 可以更简单...
+------------------+-----------+ | MANAGER_NAME |平均(工资) | +------------------+-----------+ |拉克希米米塔尔 | 400000 | |马克扎克伯格 | 285000 | |威廉盖茨三世| 300000 |等等,等等,(8行)这是我的第一篇文章,我希望我的问题很清楚......我不确定我的格式是否会保持不变。抱歉,如果结果不可读。感谢您的任何输入,肯定有一个更简单的查询可以工作。顺便说一句,我正在使用 Oracle 做这件事,尽管我怀疑这没什么区别,如果有的话。
【问题讨论】:
【参考方案1】:from managers_and_salaries
where manager_name in (select distinct manager_name
from managers_and_salaries)
where 子句是多余的:from 子句已经确保只考虑 manager_and_salaries 中的经理。
一旦我们删除该子句,managers_and_salaries 只会使用一次,并且内联其定义可能更简单:
select m.manager_name, avg(w.salary)
from manages m
inner join works w on m.employee_name = w.employee_name
group by manager_name;
【讨论】:
Grrr,令人沮丧...但是非常感谢。我希望我保留以前的尝试,看看我做错了什么。我最初尝试执行您所显示的操作,但是当我将 avg(w.salary) 添加到 select 子句时,我一直收到错误消息。显然,我的查询一定与您的有所不同。以上是关于sql计算平均值与group by?的主要内容,如果未能解决你的问题,请参考以下文章