【问题标题】:Find who gets the maximum salary in each location [closed]找出每个地点的最高薪水[关闭]
【发布时间】:2013-11-14 09:00:05
【问题描述】:
我有两个表如下:
employ_offical:
身份证姓名工资
1 拉吉 5000
2 内存 8000
3 巴鲁 3000
4大卫4000
员工个人:
名称位置
拉吉印度
中国公羊
印度巴鲁
大卫中国
从这两个表中,我需要知道如何检索每个地点的最高工资;在一个地方,一个人应该属于这些类别。
如何检索每个地点的最高工资?
【问题讨论】:
标签:
sql
oracle
oracle10g
greatest-n-per-group
【解决方案1】:
这是解决此问题的一种方法:
select p.location, p.name, o.salary
from employ_offical o,
employee_personal p
where o.name = p.name
and o.salary = (
select max(o2.salary)
from employ_offical o2,
employee_personal p2
where o2.name = p2.name
and p2.location = p.location);
有一个 SQL Fiddle here。
请注意,我在这里加入了 name,因为它是唯一可用的加入,但从设计角度来看,两个表中都有 id 并加入 id 会更好。
【解决方案2】:
这应该可行:
SELECT eo.name, ep.location, eo.salary
FROM employ_offical eo
INNER JOIN employee_personal ep ON eo.name = ep.name
WHERE eo.salary = (SELECT MAX(salary)
FROM employ_offical eo1
INNER JOIN employee_personal ep1 ON eo1.name=ep1.name
WHERE ep.location = ep1.location
)
但这可能不是最有效或最漂亮的方法。
请注意,如果同一地点的多人共享该地点的最高工资,则此查询将返回所有人。