sql - 我尝试通过以下查询找到平均工资
问题描述
我需要找到谁的收入高于他们自己公司的平均工资,但如果某家公司有不止一名员工(收入超过他们自己公司的平均工资),那么我需要从中选择最高的一个
select w.*
from (select w.*, avg(salary) over (partition by company_name) as avgsalary
from works w
) w
where w.salary >w.avgsalary;
结果:-
-----------------------------------------------------
Emp_Name| company_name |salary |avgsalary
--------|-----------------------|--------|-----------
emp 11 D Bank Corporation 39000 36800
emp 8 First Bank Corporation 40000 36280
emp 15 Nation Bank Corporation 42000 36800
emp 9 Small Bank Corporation 38900 37620
emp 5 Small Bank Corporation 39200 37620
emp 2 Small Bank Corporation 38000 37620
但我需要结果为:
-----------------------------------------------------
Emp_Name| company_name |salary |avgsalary
--------|-----------------------|--------|-----------
emp 11 D Bank Corporation 39000 36800
emp 8 First Bank Corporation 40000 36280
emp 15 Nation Bank Corporation 42000 36800
emp 5 Small Bank Corporation 39200 37620
emp 5的薪水大于 emp 9 和 2。所以这就是为什么第一个结果不被接受。请帮我通过我的查询找到第二个结果
解决方案
我会ROW_NUMBER
在这里添加到组合中:
select w.*
from (
select w.*, avg(salary) over (partition by company_name) as avgsalary,
row_number() over (partition by company_name order by salary desc) rn
from works w
) w
where
salary > avgsalary and
rn = 1;
上述查询与原始查询的逻辑区别在于,现在如果有两名或多名员工的薪水超过平均水平,则只会返回薪水最高的员工。对于两个高于平均水平的工资关系的额外边缘情况,您应该指定有关如何打破该关系的附加逻辑(或者,您可以将ROW_NUMBER
上面替换为RANK
,并返回它们)。
推荐阅读
- c# - C# Bitmap 通过执行 XOR 更改像素颜色
- flutter - 如何删除 Flutter IconButton 大填充?
- reactjs - 将 API 调用的响应作为另一个 API 调用的参数传递
- laravel - Laravel 强制 www 和 HTTPS 错误:重定向到 index.php
- webpack - webpack 崩溃扩展应用程序
- bash - 字符串与 Bash 中的输出比较
- javascript - 我希望在由“事件”触发时出现图像,而其他问题没有任何效果
- c# - HighCharts 仪表从 -100% 到 100%
- vba - 如何简化使用活动单元格/复制/粘贴在工作表之间传输数据?
- regex - regexprep 函数无法接受 \b 来查找数字范围