mysql - SQL - Greatest-n-per-group of average
问题描述
我在使用以下查询时遇到问题。假设您有以下员工表:
示例表EMPLOYEE
:
IDEMP | JOB | SALARY | CONTENT
------+-----------+--------+---------
1 | CLERK | 1500 | ...
2 | CLERK | 1000 | ...
3 | PRESIDENT | 5000 | ...
4 | ANALYST | 2000 | ...
... ... ... ...
我正在努力获得平均工资最高的工作。我可以通过这个子查询轻松获得每个工作的平均工资:
(select job, avg(salary) as AVERAGE
from emp
group by job) temp
但是,我不知道如何在此子查询之后获得具有关联 JOB 的 max(AVERAGE)。我知道如果我只需要薪水最高的员工的行,我可以按照此处的说明进行操作SQL select only rows with max value on a column,但是当您执行“平均子查询”时,您会丢失 ID雇员。
由于对于这个给定的示例,只有一位 PRESIDENT,并且该工作的平均工资最高,因此输出应该是这样的:
JOB | MAX_AVERAGE
----------+---------------
PRESIDENT | 5000
编辑:我的解决方案...
感谢您的帮助,您提出了新的想法。我终于使用了这个,因为它不会将结果限制在一行。
select e.job, avg(e.salary) as AVERAGE
from EMPLOYEE e
group by e.job
having avg(e.salary) >= ALL(select avg(salary) from EMPLOYEE group by job)
解决方案
按平均降序对查询进行排序并选择第一行:
select job, avg(salary) as AVERAGE
from EMPLOYEE
group by job
order by AVERAGE desc limit 1
请参阅演示。
推荐阅读
- c# - 在 ConfigureServices 中为 Generic 类添加 DI
- javascript - Angular 中的响应式表单:双向绑定
- ios - 使用 AVMutableComposition 导出镜像视频会导致调整大小问题
- django - Django rest 框架 jwt 令牌权限
- node.js - Console.log 上的 NodeJS 简单水平线
- python-2.7 - Selenium - 如何关闭代理登录弹出窗口
- android - 如何将字节数组转换为字符串?
- python-3.x - CDON API RESTful Api GET 请求
- kubernetes - Kubernetes 外部 IP 不适用于所有节点
- django - 从一个模型中获取其他模型的 pk